internal static SPOnlineConnection InitiateAzureADNativeApplicationConnection(Uri url, string clientId, Uri redirectUri, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); string appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string configFile = Path.Combine(appDataFolder, "SharePointPnP.PowerShell\\tokencache.dat"); FileTokenCache cache = new FileTokenCache(configFile); var context = PnPClientContext.ConvertFrom(authManager.GetAzureADNativeApplicationAuthenticatedContext(url.ToString(), clientId, redirectUri, cache, azureEnvironment), retryCount, retryWait * 10000); var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.AzureADNativeApplication; return(spoConnection); }
internal static SPOnlineConnection InstantiateWebloginConnection(Uri url, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); var context = PnPClientContext.ConvertFrom(authManager.GetWebLoginClientContext(url.ToString()), retryCount, retryWait * 1000); if (context != null) { context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; context.RequestTimeout = requestTimeout; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 context.DisableReturnValueCache = true; #endif var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.WebLogin; return(spoConnection); } throw new Exception("Error establishing a connection, context is null"); }
private static SPOnlineConnection InitiateAzureAdAppOnlyConnectionWithCert(Uri url, string clientId, string tenant, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, PSHost host, bool disableTelemetry, bool skipAdminCheck, AzureEnvironment azureEnvironment, X509Certificate2 certificate) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); var clientContext = authManager.GetAzureADAppOnlyAuthenticatedContext(url.ToString(), clientId, tenant, certificate, azureEnvironment); var context = PnPClientContext.ConvertFrom(clientContext, retryCount, retryWait * 1000); context.RequestTimeout = requestTimeout; var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } CleanupCryptoMachineKey(certificate); var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag, host, disableTelemetry, InitializationType.AADAppOnly); spoConnection.ConnectionMethod = ConnectionMethod.AzureADAppOnly; return(spoConnection); }
internal static bool DisconnectCurrentService(SPOnlineConnection connection) { if (connection == null) { return(false); } connection = null; return(true); }
internal static SPOnlineConnection InstantiateGraphAccessTokenConnection(string accessToken, PSHost host, bool disableTelemetry) { var jwtToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); var tokenResult = new TokenResult(); tokenResult.AccessToken = accessToken; tokenResult.ExpiresOn = jwtToken.ValidTo; var spoConnection = new SPOnlineConnection(tokenResult, ConnectionMethod.AccessToken, ConnectionType.O365, 0, 0, 0, PnPPSVersionTag, host, disableTelemetry, InitializationType.Graph); spoConnection.ConnectionMethod = ConnectionMethod.GraphDeviceLogin; return(spoConnection); }
internal static bool DisconnectCurrentService(SPOnlineConnection connection) { SPOnlineConnection.CurrentConnection.AccessToken = string.Empty; Environment.SetEnvironmentVariable("PNPPSHOST", string.Empty); Environment.SetEnvironmentVariable("PNPPSSITE", string.Empty); if (connection == null) { return(false); } connection = null; return(true); }
internal static SPOnlineConnection InstantiateGraphAccessTokenConnection(string accessToken) { #if NETSTANDARD2_0 var jwtToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); #else var jwtToken = new System.IdentityModel.Tokens.JwtSecurityToken(accessToken); #endif var tokenResult = new TokenResult(); tokenResult.AccessToken = accessToken; tokenResult.ExpiresOn = jwtToken.ValidTo; var spoConnection = new SPOnlineConnection(tokenResult, ConnectionMethod.AccessToken, ConnectionType.O365, 0, 0, 0, PnPPSVersionTag); spoConnection.ConnectionMethod = ConnectionMethod.GraphDeviceLogin; return(spoConnection); }
internal static SPOnlineConnection InitiateAccessTokenConnection(Uri url, string accessToken, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); var context = PnPClientContext.ConvertFrom(authManager.GetAzureADAccessTokenAuthenticatedContext(url.ToString(), accessToken), retryCount, retryWait); var connectionType = ConnectionType.O365; if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.AccessToken; return(spoConnection); }
internal static SPOnlineConnection InstantiateAdfsConnection(Uri url, PSCredential credentials, PSHost host, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); var networkCredentials = credentials.GetNetworkCredential(); string adfsHost; string adfsRelyingParty; GetAdfsConfigurationFromTargetUri(url, out adfsHost, out adfsRelyingParty); if (string.IsNullOrEmpty(adfsHost) || string.IsNullOrEmpty(adfsRelyingParty)) { throw new Exception("Cannot retrieve ADFS settings."); } var context = PnPClientContext.ConvertFrom(authManager.GetADFSUserNameMixedAuthenticatedContext(url.ToString(), networkCredentials.UserName, networkCredentials.Password, networkCredentials.Domain, adfsHost, adfsRelyingParty), retryCount, retryWait * 1000); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; context.RequestTimeout = requestTimeout; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 context.DisableReturnValueCache = true; #endif var connectionType = ConnectionType.OnPrem; if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.ADFS; return(spoConnection); }
internal static SPOnlineConnection InitiateAzureADAppOnlyConnection(Uri url, string clientId, string tenant, string certificatePath, SecureString certificatePassword, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); var context = PnPClientContext.ConvertFrom(authManager.GetAzureADAppOnlyAuthenticatedContext(url.ToString(), clientId, tenant, certificatePath, certificatePassword, azureEnvironment), retryCount, retryWait * 1000); var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.AzureADAppOnly; return(spoConnection); }
internal static SPOnlineConnection InstantiateAdfsCertificateConnection(Uri url, string serialNumber, PSHost host, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool disableTelemetry, bool skipAdminCheck = false, string loginProviderName = null) { var authManager = new OfficeDevPnP.Core.AuthenticationManager(); string adfsHost; string adfsRelyingParty; OfficeDevPnP.Core.AuthenticationManager.GetAdfsConfigurationFromTargetUri(url, loginProviderName, out adfsHost, out adfsRelyingParty); if (string.IsNullOrEmpty(adfsHost) || string.IsNullOrEmpty(adfsRelyingParty)) { throw new Exception("Cannot retrieve ADFS settings."); } var context = authManager.GetADFSCertificateMixedAuthenticationContext(url.ToString(), serialNumber, adfsHost, adfsRelyingParty); context.ApplicationName = Properties.Resources.ApplicationName; context.RequestTimeout = requestTimeout; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 || SP2019 context.DisableReturnValueCache = true; #endif var connectionType = ConnectionType.OnPrem; if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag, host, disableTelemetry, InitializationType.ADFS); spoConnection.ConnectionMethod = ConnectionMethod.ADFS; return(spoConnection); }
internal static SPOnlineConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, PSHost host, bool currentCredentials, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool skipAdminCheck = false, ClientAuthenticationMode authenticationMode = ClientAuthenticationMode.Default) { var context = new PnPClientContext(url.AbsoluteUri); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 context.DisableReturnValueCache = true; #endif context.RequestTimeout = requestTimeout; context.AuthenticationMode = authenticationMode; if (authenticationMode == ClientAuthenticationMode.FormsAuthentication) { var formsAuthInfo = new FormsAuthenticationLoginInfo(credentials.UserName, EncryptionUtility.ToInsecureString(credentials.Password)); context.FormsAuthenticationLoginInfo = formsAuthInfo; } if (!currentCredentials) { try { SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(credentials.UserName, credentials.Password); context.Credentials = onlineCredentials; try { context.ExecuteQueryRetry(); } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } catch (ArgumentException) { // OnPrem? context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); try { context.ExecuteQueryRetry(); } catch (ClientRequestException ex) { throw new Exception("Error establishing a connection", ex); } catch (ServerException ex) { throw new Exception("Error establishing a connection", ex); } } } else { if (credentials != null) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } var connectionType = ConnectionType.OnPrem; if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag); spoConnection.ConnectionMethod = Model.ConnectionMethod.Credentials; return(spoConnection); }
internal static SPOnlineConnection InstantiateGraphDeviceLoginConnection(bool launchBrowser, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, Action <string> messageCallback, Action <string> progressCallback, Func <bool> cancelRequest) { var connectionUri = new Uri("https://graph.microsoft.com"); HttpClient client = new HttpClient(); var result = client.GetStringAsync($"https://login.microsoftonline.com/common/oauth2/devicecode?resource={connectionUri.Scheme}://{connectionUri.Host}&client_id={SPOnlineConnection.DeviceLoginAppId}").GetAwaiter().GetResult(); var returnData = JsonConvert.DeserializeObject <Dictionary <string, string> >(result); SPOnlineConnection spoConnection = null; if (launchBrowser) { Utilities.Clipboard.Copy(returnData["user_code"]); messageCallback("Code has been copied to clipboard"); #if !NETSTANDARD2_0 BrowserHelper.OpenBrowser(returnData["verification_url"], (success) => { if (success) { var tokenResult = GetTokenResult(connectionUri, returnData, messageCallback, progressCallback, cancelRequest); if (tokenResult != null) { progressCallback("Token received"); spoConnection = new SPOnlineConnection(tokenResult, ConnectionMethod.GraphDeviceLogin, ConnectionType.O365, minimalHealthScore, retryCount, retryWait, PnPPSVersionTag); } else { progressCallback("No token received."); } } }); #else OpenBrowser(returnData["verification_url"]); messageCallback(returnData["message"]); var tokenResult = GetTokenResult(connectionUri, returnData, messageCallback, progressCallback, cancelRequest); if (tokenResult != null) { progressCallback("Token received"); spoConnection = new SPOnlineConnection(tokenResult, ConnectionMethod.GraphDeviceLogin, ConnectionType.O365, minimalHealthScore, retryCount, retryWait, PnPPSVersionTag); } else { progressCallback("No token received."); } #endif } else { messageCallback(returnData["message"]); var tokenResult = GetTokenResult(connectionUri, returnData, messageCallback, progressCallback, cancelRequest); if (tokenResult != null) { progressCallback("Token received"); spoConnection = new SPOnlineConnection(tokenResult, ConnectionMethod.GraphDeviceLogin, ConnectionType.O365, minimalHealthScore, retryCount, retryWait, PnPPSVersionTag); } else { progressCallback("No token received."); } } spoConnection.ConnectionMethod = ConnectionMethod.GraphDeviceLogin; return(spoConnection); }
internal static SPOnlineConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, PSHost host, bool currentCredentials, int minimalHealthScore, int retryCount, int retryWait, int requestTimeout, string tenantAdminUrl, bool disableTelemetry, bool skipAdminCheck = false, ClientAuthenticationMode authenticationMode = ClientAuthenticationMode.Default) { var context = new PnPClientContext(url.AbsoluteUri); context.RetryCount = retryCount; context.Delay = retryWait * 1000; context.ApplicationName = Properties.Resources.ApplicationName; #if !ONPREMISES context.DisableReturnValueCache = true; #elif SP2016 || SP2019 context.DisableReturnValueCache = true; #endif context.RequestTimeout = requestTimeout; context.AuthenticationMode = authenticationMode; if (authenticationMode == ClientAuthenticationMode.FormsAuthentication) { var formsAuthInfo = new FormsAuthenticationLoginInfo(credentials.UserName, EncryptionUtility.ToInsecureString(credentials.Password)); context.FormsAuthenticationLoginInfo = formsAuthInfo; } if (!currentCredentials) { try { SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(credentials.UserName, credentials.Password); context.Credentials = onlineCredentials; try { context.ExecuteQueryRetry(); } #if !ONPREMISES catch (NotSupportedException nox) { #if NETSTANDARD2_1 // Legacy auth is not supported with .NET Standard throw nox; #else // legacy auth? var authManager = new OfficeDevPnP.Core.AuthenticationManager(); context = PnPClientContext.ConvertFrom(authManager.GetAzureADCredentialsContext(url.ToString(), credentials.UserName, credentials.Password)); context.ExecuteQueryRetry(); #endif } #endif catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } } catch (ArgumentException) { // OnPrem? context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); try { context.ExecuteQueryRetry(); } catch (ClientRequestException ex) { throw new Exception("Error establishing a connection", ex); } catch (ServerException ex) { throw new Exception("Error establishing a connection", ex); } } } else { if (credentials != null) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } else { // If current credentials should be used, use the DefaultNetworkCredentials of the CredentialCache. This has the same effect // as using "UseDefaultCredentials" in a HttpClient. context.Credentials = CredentialCache.DefaultNetworkCredentials; } } #if SP2013 || SP2016 || SP2019 var connectionType = ConnectionType.OnPrem; #else var connectionType = ConnectionType.O365; #endif if (url.Host.ToUpperInvariant().EndsWith("SHAREPOINT.COM")) { connectionType = ConnectionType.O365; } if (skipAdminCheck == false) { if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var spoConnection = new SPOnlineConnection(context, connectionType, minimalHealthScore, retryCount, retryWait, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, host, disableTelemetry, InitializationType.Credentials); spoConnection.ConnectionMethod = Model.ConnectionMethod.Credentials; return(spoConnection); }
protected override void ProcessRecord() { if (IgnoreSslErrors) { ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; } PSCredential creds = null; if (Credentials != null) { creds = Credentials.Credential; } SPOnlineConnection connection = null; if (ParameterSetName == ParameterSet_TOKEN) { connection = SPOnlineConnectionHelper.InstantiateSPOnlineConnection(new Uri(Url), Realm, AppId, AppSecret, Host, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck); } else if (UseWebLogin) { connection = SPOnlineConnectionHelper.InstantiateWebloginConnection(new Uri(Url), MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck); } else if (UseAdfs) { if (creds == null) { if ((creds = GetCredentials()) == null) { creds = Host.UI.PromptForCredential(Properties.Resources.EnterYourCredentials, "", "", ""); } } connection = SPOnlineConnectionHelper.InstantiateAdfsConnection(new Uri(Url), creds, Host, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck); } #if !ONPREMISES else if (ParameterSetName == ParameterSet_SPOMANAGEMENT) { connection = ConnectNativAAD(SPOManagementClientId, SPOManagementRedirectUri); } else if (ParameterSetName == ParameterSet_NATIVEAAD) { connection = ConnectNativAAD(ClientId, RedirectUri); } else if (ParameterSetName == ParameterSet_APPONLYAAD) { connection = SPOnlineConnectionHelper.InitiateAzureADAppOnlyConnection(new Uri(Url), ClientId, Tenant, CertificatePath, CertificatePassword, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck, AzureEnvironment); } else if (ParameterSetName == ParameterSet_GRAPHWITHSCOPE) { ConnectGraphScopes(); } else if (ParameterSetName == ParameterSet_GRAPHWITHAAD) { ConnectGraphAAD(); } else if (ParameterSetName == ParameterSet_ACCESSTOKEN) { connection = SPOnlineConnectionHelper.InitiateAccessTokenConnection(new Uri(Url), AccessToken, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck, AzureEnvironment); } #endif #if ONPREMISES else if (ParameterSetName == ParameterSet_HIGHTRUST) { connection = SPOnlineConnectionHelper.InstantiateHighTrustConnection(Url, ClientId, HighTrustCertificatePath, HighTrustCertificatePassword, HighTrustCertificateIssuerId, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck); } #endif else { if (!CurrentCredentials && creds == null) { creds = GetCredentials(); if (creds == null) { creds = Host.UI.PromptForCredential(Properties.Resources.EnterYourCredentials, "", "", ""); } } connection = SPOnlineConnectionHelper.InstantiateSPOnlineConnection(new Uri(Url), creds, Host, CurrentCredentials, MinimalHealthScore, RetryCount, RetryWait, RequestTimeout, TenantAdminUrl, SkipTenantAdminCheck, AuthenticationMode); } #if !ONPREMISES if (MyInvocation.BoundParameters.ContainsKey("Scopes") && ParameterSetName != ParameterSet_GRAPHWITHSCOPE) { ConnectGraphScopes(); } #endif WriteVerbose($"PnP PowerShell Cmdlets ({System.Reflection.Assembly.GetExecutingAssembly().GetName().Version}): Connected to {Url}"); SPOnlineConnection.CurrentConnection = connection; if (CreateDrive && SPOnlineConnection.CurrentConnection.Context != null) { var provider = SessionState.Provider.GetAll().FirstOrDefault(p => p.Name.Equals(SPOProvider.PSProviderName, StringComparison.InvariantCultureIgnoreCase)); if (provider != null) { if (provider.Drives.Any(d => d.Name.Equals(DriveName, StringComparison.InvariantCultureIgnoreCase))) { SessionState.Drive.Remove(DriveName, true, "Global"); } var drive = new PSDriveInfo(DriveName, provider, string.Empty, Url, null); SessionState.Drive.New(drive, "Global"); } } if (ReturnConnection) { WriteObject(connection); } }