internal static PnPConnection CreateWithCert(Uri url, string clientId, string tenant, string tenantAdminUrl, AzureEnvironment azureEnvironment, X509Certificate2 certificate, bool certificateFromFile = false) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCertificate(clientId, certificate, tenant, azureEnvironment: azureEnvironment); } using (authManager) { var clientContext = authManager.GetContext(url.ToString()); var context = PnPClientContext.ConvertFrom(clientContext); var connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDCertificate) { ConnectionMethod = ConnectionMethod.AzureADAppOnly, Certificate = certificate, Tenant = tenant, DeleteCertificateFromCacheOnDisconnect = certificateFromFile, AzureEnvironment = azureEnvironment }; return(spoConnection); } }
internal static PnPConnection CreateWithAccessToken(Uri url, string accessToken, string tenantAdminUrl) { using (var authManager = new PnP.Framework.AuthenticationManager(new System.Net.NetworkCredential("", accessToken).SecurePassword)) { PnPClientContext context = null; ConnectionType connectionType = ConnectionType.O365; if (url != null) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ApplicationName = Resources.ApplicationName; context.DisableReturnValueCache = true; context.ExecutingWebRequest += (sender, e) => { e.WebRequestExecutor.WebRequest.UserAgent = $"NONISV|SharePointPnP|PnPPS/{((AssemblyFileVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version} ({System.Environment.OSVersion.VersionString})"; }; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var connection = new PnPConnection(context, connectionType, null, url != null ? url.ToString() : null, tenantAdminUrl, PnPPSVersionTag, InitializationType.Token); return(connection); } }
internal static PnPConnection CreateWithACSAppOnly(Uri url, string realm, string clientId, string clientSecret, string tenantAdminUrl, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { ConnectionType connectionType; PnPClientContext context = null; if (url != null) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = new PnP.Framework.AuthenticationManager(); } using (authManager) { if (realm == null) { realm = GetRealmFromTargetUrl(url); } if (url.DnsSafeHost.Contains("spoppe.com")) { context = PnPClientContext.ConvertFrom(authManager.GetACSAppOnlyContext(url.ToString(), realm, clientId, clientSecret, acsHostUrl: "windows-ppe.net", globalEndPointPrefix: "login")); } else { context = PnPClientContext.ConvertFrom(authManager.GetACSAppOnlyContext(url.ToString(), realm, clientId, clientSecret, acsHostUrl: Framework.AuthenticationManager.GetACSEndPoint(azureEnvironment), globalEndPointPrefix: Framework.AuthenticationManager.GetACSEndPointPrefix(azureEnvironment))); } context.ApplicationName = Resources.ApplicationName; context.DisableReturnValueCache = true; connectionType = ConnectionType.O365; context.ExecutingWebRequest += (sender, e) => { e.WebRequestExecutor.WebRequest.UserAgent = $"NONISV|SharePointPnP|PnPPS/{((AssemblyFileVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version} ({System.Environment.OSVersion.VersionString})"; }; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } } else { connectionType = ConnectionType.O365; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, clientSecret, url?.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDSecret) { Tenant = realm, AzureEnvironment = azureEnvironment }; return(spoConnection); }
internal static PnPConnection CreateWithACSAppOnly(Uri url, string realm, string clientId, string clientSecret, string tenantAdminUrl, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { ConnectionType connectionType; PnPClientContext context = null; if (url != null) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = new PnP.Framework.AuthenticationManager(); } using (authManager) { if (realm == null) { realm = GetRealmFromTargetUrl(url); } if (url.DnsSafeHost.Contains("spoppe.com")) { context = PnPClientContext.ConvertFrom(authManager.GetACSAppOnlyContext(url.ToString(), realm, clientId, clientSecret, acsHostUrl: "windows-ppe.net", globalEndPointPrefix: "login")); } else { context = PnPClientContext.ConvertFrom(authManager.GetACSAppOnlyContext(url.ToString(), realm, clientId, clientSecret, acsHostUrl: Framework.AuthenticationManager.GetACSEndPoint(azureEnvironment), globalEndPointPrefix: Framework.AuthenticationManager.GetACSEndPointPrefix(azureEnvironment))); } context.ApplicationName = Resources.ApplicationName; context.DisableReturnValueCache = true; connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } } else { connectionType = ConnectionType.O365; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, clientSecret, url?.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDSecret) { Tenant = realm, AzureEnvironment = azureEnvironment }; return(spoConnection); }
private static ClientContext CreateContext(string contextUrl, PSCredential credentials) { ClientContext context = null; using (var am = new PnP.Framework.AuthenticationManager(credentials.UserName, credentials.Password)) { context = am.GetContext(contextUrl); } context.RequestTimeout = Timeout.Infinite; return(context); }
internal static PnPConnection InstantiateDeviceLoginConnection(string url, bool launchBrowser, CmdletMessageWriter messageWriter, AzureEnvironment azureEnvironment, CancellationToken cancellationToken) { var connectionUri = new Uri(url); var scopes = new[] { $"{connectionUri.Scheme}://{connectionUri.Authority}//.default" }; // the second double slash is not a typo. PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { Func <DeviceCodeResult, Task> deviceCodeCallback = (deviceCodeResult) => { if (launchBrowser) { if (Utilities.OperatingSystem.IsWindows()) { ClipboardService.SetText(deviceCodeResult.UserCode); messageWriter.WriteMessage($"\n\nCode {deviceCodeResult.UserCode} has been copied to your clipboard\n\n"); BrowserHelper.GetWebBrowserPopup(deviceCodeResult.VerificationUrl, "Please log in"); } else { messageWriter.WriteMessage($"\n\n{deviceCodeResult.Message}\n\n"); } } else { messageWriter.WriteMessage($"\n\n{deviceCodeResult.Message}\n\n"); } return(Task.FromResult(0)); }; authManager = new PnP.Framework.AuthenticationManager(PnPConnection.PnPManagementShellClientId, deviceCodeCallback, azureEnvironment); } using (authManager) { var clientContext = authManager.GetContext(url.ToString(), cancellationToken); var context = PnPClientContext.ConvertFrom(clientContext); var connectionType = ConnectionType.O365; var spoConnection = new PnPConnection(context, connectionType, null, PnPConnection.PnPManagementShellClientId, null, url.ToString(), null, PnPPSVersionTag, InitializationType.DeviceLogin) { ConnectionMethod = ConnectionMethod.DeviceLogin, AzureEnvironment = azureEnvironment }; return(spoConnection); } }
internal static PnPConnection InstantiateSPOnlineConnection(Uri url, PSCredential credentials, string tenantAdminUrl, bool disableTelemetry, AzureEnvironment azureEnvironment = AzureEnvironment.Production) { var context = new PnPClientContext(url.AbsoluteUri) { ApplicationName = Resources.ApplicationName, DisableReturnValueCache = true }; var tenantId = string.Empty; try { using (var authManager = new PnP.Framework.AuthenticationManager(credentials.UserName, credentials.Password)) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); var accessToken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } var connectionType = ConnectionType.O365; if (url.Host.ToLowerInvariant().EndsWith($"sharepoint.{PnP.Framework.AuthenticationManager.GetSharePointDomainSuffix(azureEnvironment)}")) { connectionType = ConnectionType.O365; } if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, disableTelemetry, InitializationType.Credentials) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, Tenant = tenantId }; return(spoConnection); }
internal static PnPConnection CreateWithInteractiveLogin(Uri uri, string clientId, string tenantAdminUrl, bool launchBrowser, AzureEnvironment azureEnvironment, CancellationTokenSource cancellationTokenSource, bool forceAuthentication, string tenant) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null && !forceAuthentication) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithInteractiveLogin(clientId, (url, port) => { BrowserHelper.OpenBrowserForInteractiveLogin(url, port, !launchBrowser, cancellationTokenSource); }, tenant, successMessageHtml: $"You successfully authenticated with PnP PowerShell. Feel free to close this {(launchBrowser ? "tab" : "window")}.", failureMessageHtml: $"You did not authenticate with PnP PowerShell. Feel free to close this browser {(launchBrowser ? "tab" : "window")}.", azureEnvironment: azureEnvironment); } using (authManager) { var clientContext = authManager.GetContext(uri.ToString(), cancellationTokenSource.Token); var context = PnPClientContext.ConvertFrom(clientContext); context.ExecutingWebRequest += (sender, e) => { e.WebRequestExecutor.WebRequest.UserAgent = $"NONISV|SharePointPnP|PnPPS/{((AssemblyFileVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version} ({System.Environment.OSVersion.VersionString})"; }; var connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, uri.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDCertificate) { ConnectionMethod = ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment }; return(spoConnection); } }
internal static PnPConnection CreateWithAccessToken(Uri url, string accessToken, string tenantAdminUrl) { using (var authManager = new PnP.Framework.AuthenticationManager(new System.Net.NetworkCredential("", accessToken).SecurePassword)) { PnPClientContext context = null; ConnectionType connectionType = ConnectionType.O365; if (url != null) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ApplicationName = Resources.ApplicationName; context.DisableReturnValueCache = true; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } } var connection = new PnPConnection(context, connectionType, null, url != null ? url.ToString() : null, tenantAdminUrl, PnPPSVersionTag, InitializationType.Token); return(connection); } }
private static void LogTemperature(double currentTemperature) { var authManager = new PnP.Framework.AuthenticationManager(APPLICATION_CLIENT_ID, CERTIFICATE_PATH, CERTIFICATE_PASSWORD, DIRECTORY_TENANT_ID); using (var context = authManager.GetContext(SHAREPOINT_SITE_URL)) { Web web = context.Web; context.Load(web, w => w.Lists); context.ExecuteQuery(); List list = web.Lists.GetByTitle(LIST_NAME); context.ExecuteQuery(); ListItemCreationInformation newItem = new ListItemCreationInformation(); ListItem oListItem = list.AddItem(newItem); oListItem["Title"] = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); oListItem["Temperature"] = currentTemperature.ToString(); oListItem.Update(); context.ExecuteQuery(); } }
internal static PnPConnection CreateWithInteractiveLogin(Uri uri, string clientId, string tenantAdminUrl, bool launchBrowser, AzureEnvironment azureEnvironment, CancellationTokenSource cancellationTokenSource, bool forceAuthentication, string tenant) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null && !forceAuthentication) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithInteractiveLogin(clientId, (url, port) => { BrowserHelper.OpenBrowserForInteractiveLogin(url, port, !launchBrowser, cancellationTokenSource); }, tenant, successMessageHtml: $"You successfully authenticated with PnP PowerShell. Feel free to close this {(launchBrowser ? "tab" : "window")}.", failureMessageHtml: $"You did not authenticate with PnP PowerShell. Feel free to close this browser {(launchBrowser ? "tab" : "window")}.", azureEnvironment: azureEnvironment); } using (authManager) { var clientContext = authManager.GetContext(uri.ToString(), cancellationTokenSource.Token); var context = PnPClientContext.ConvertFrom(clientContext); var connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, uri.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDCertificate) { ConnectionMethod = ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment }; return(spoConnection); } }
internal static PnPConnection CreateWithCert(Uri url, string clientId, string tenant, string tenantAdminUrl, AzureEnvironment azureEnvironment, X509Certificate2 certificate, bool certificateFromFile = false) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCertificate(clientId, certificate, tenant, azureEnvironment: azureEnvironment); } using (authManager) { var clientContext = authManager.GetContext(url.ToString()); var context = PnPClientContext.ConvertFrom(clientContext); context.ExecutingWebRequest += (sender, e) => { e.WebRequestExecutor.WebRequest.UserAgent = $"NONISV|SharePointPnP|PnPPS/{((AssemblyFileVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version} ({System.Environment.OSVersion.VersionString})"; }; var connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag, InitializationType.ClientIDCertificate) { ConnectionMethod = ConnectionMethod.AzureADAppOnly, Certificate = certificate, Tenant = tenant, DeleteCertificateFromCacheOnDisconnect = certificateFromFile, AzureEnvironment = azureEnvironment }; return(spoConnection); } }
private static PnPConnection InitiateAzureAdAppOnlyConnectionWithCert(Uri url, string clientId, string tenant, string tenantAdminUrl, bool disableTelemetry, AzureEnvironment azureEnvironment, X509Certificate2 certificate, bool certificateFromFile) { using (var authManager = new PnP.Framework.AuthenticationManager(clientId, certificate, tenant, azureEnvironment: azureEnvironment)) { var clientContext = authManager.GetContext(url.ToString()); var context = PnPClientContext.ConvertFrom(clientContext); var connectionType = ConnectionType.O365; if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, url.ToString(), tenantAdminUrl, PnPPSVersionTag, disableTelemetry, InitializationType.AADAppOnly) { ConnectionMethod = ConnectionMethod.AzureADAppOnly, Certificate = certificate, Tenant = tenant, DeleteCertificateFromCacheOnDisconnect = certificateFromFile }; return(spoConnection); } }
internal static PnPConnection CreateWithCredentials(Cmdlet cmdlet, Uri url, PSCredential credentials, bool currentCredentials, string tenantAdminUrl, AzureEnvironment azureEnvironment = AzureEnvironment.Production, string clientId = null, string redirectUrl = null, bool onPrem = false, InitializationType initializationType = InitializationType.Credentials) { var context = new PnPClientContext(url.AbsoluteUri) { ApplicationName = Resources.ApplicationName, DisableReturnValueCache = true }; PnPConnection spoConnection = null; if (!onPrem) { var tenantId = string.Empty; try { if (!string.IsNullOrWhiteSpace(clientId)) { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCredentials(clientId, credentials.UserName, credentials.Password, redirectUrl, azureEnvironment); } using (authManager) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); cmdlet.WriteVerbose("Acquiring token"); var accesstoken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); cmdlet.WriteVerbose("Token acquired"); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accesstoken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } else { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithCredentials(credentials.UserName, credentials.Password, azureEnvironment); } using (authManager) { context = PnPClientContext.ConvertFrom(authManager.GetContext(url.ToString())); context.ExecuteQueryRetry(); var accessToken = authManager.GetAccessTokenAsync(url.ToString()).GetAwaiter().GetResult(); var parsedToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(accessToken); tenantId = parsedToken.Claims.FirstOrDefault(c => c.Type == "tid").Value; } } } catch (ClientRequestException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } catch (ServerException) { context.Credentials = new NetworkCredential(credentials.UserName, credentials.Password); } var connectionType = ConnectionType.O365; if (url.Host.ToLowerInvariant().EndsWith($"sharepoint.{PnP.Framework.AuthenticationManager.GetSharePointDomainSuffix(azureEnvironment)}")) { connectionType = ConnectionType.O365; } if (IsTenantAdminSite(context)) { connectionType = ConnectionType.TenantAdmin; } spoConnection = new PnPConnection(context, connectionType, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, initializationType) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, Tenant = tenantId }; } else { PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; } else { authManager = new PnP.Framework.AuthenticationManager(); } using (authManager) { if (currentCredentials) { context = PnPClientContext.ConvertFrom(authManager.GetOnPremisesContext(url.ToString())); } else { context = PnPClientContext.ConvertFrom(authManager.GetOnPremisesContext(url.ToString(), credentials.UserName, credentials.Password)); } } spoConnection = new PnPConnection(context, ConnectionType.O365, credentials, url.ToString(), tenantAdminUrl, PnPPSVersionTag, initializationType) { ConnectionMethod = Model.ConnectionMethod.Credentials, AzureEnvironment = azureEnvironment, }; } return(spoConnection); }
internal static PnPConnection CreateWithDeviceLogin(string clientId, string url, string tenantId, bool launchBrowser, CmdletMessageWriter messageWriter, AzureEnvironment azureEnvironment, CancellationTokenSource cancellationTokenSource) { var connectionUri = new Uri(url); var scopes = new[] { $"{connectionUri.Scheme}://{connectionUri.Authority}//.default" }; // the second double slash is not a typo. PnP.Framework.AuthenticationManager authManager = null; if (PnPConnection.CachedAuthenticationManager != null) { authManager = PnPConnection.CachedAuthenticationManager; PnPConnection.CachedAuthenticationManager = null; } else { authManager = PnP.Framework.AuthenticationManager.CreateWithDeviceLogin(clientId, tenantId, (deviceCodeResult) => { if (launchBrowser) { if (Utilities.OperatingSystem.IsWindows()) { ClipboardService.SetText(deviceCodeResult.UserCode); messageWriter.WriteWarning($"\n\nCode {deviceCodeResult.UserCode} has been copied to your clipboard\n\n"); BrowserHelper.GetWebBrowserPopup(deviceCodeResult.VerificationUrl, "Please log in", cancellationTokenSource: cancellationTokenSource, cancelOnClose: false); } else { messageWriter.WriteWarning($"\n\n{deviceCodeResult.Message}\n\n"); } } else { messageWriter.WriteWarning($"\n\n{deviceCodeResult.Message}\n\n"); } return(Task.FromResult(0)); }, azureEnvironment); } using (authManager) { try { var clientContext = authManager.GetContext(url.ToString(), cancellationTokenSource.Token); var context = PnPClientContext.ConvertFrom(clientContext); context.ExecutingWebRequest += (sender, e) => { e.WebRequestExecutor.WebRequest.UserAgent = $"NONISV|SharePointPnP|PnPPS/{((AssemblyFileVersionAttribute)Assembly.GetExecutingAssembly().GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version} ({System.Environment.OSVersion.VersionString})"; }; var connectionType = ConnectionType.O365; var spoConnection = new PnPConnection(context, connectionType, null, clientId, null, url.ToString(), null, PnPPSVersionTag, InitializationType.DeviceLogin) { ConnectionMethod = ConnectionMethod.DeviceLogin, AzureEnvironment = azureEnvironment }; return(spoConnection); } catch (Microsoft.Identity.Client.MsalServiceException msalServiceException) { if (msalServiceException.Message.StartsWith("AADSTS50059:")) { cancellationTokenSource.Cancel(); throw new Exception("Please specify -Tenant with either the tenant id or hostname."); } else { throw; } } } }