/// <summary> /// Connect using the parameter set ACCESSTOKEN /// </summary> /// <returns>PnPConnection based on the parameters provided in the parameter set</returns> private PnPConnection ConnectAccessToken() { var handler = new JwtSecurityTokenHandler(); var jwtToken = handler.ReadJwtToken(AccessToken); var aud = jwtToken.Audiences.FirstOrDefault(); var url = Url ?? aud ?? throw new PSArgumentException(Resources.AccessTokenConnectFailed); switch (url.ToLower()) { case GraphToken.ResourceIdentifier: return(PnPConnection.GetConnectionWithToken(new GraphToken(AccessToken), TokenAudience.MicrosoftGraph, InitializationType.Token, null, disableTelemetry: NoTelemetry.ToBool())); case OfficeManagementApiToken.ResourceIdentifier: return(PnPConnection.GetConnectionWithToken(new OfficeManagementApiToken(AccessToken), TokenAudience.OfficeManagementApi, InitializationType.Token, null, disableTelemetry: NoTelemetry.ToBool())); default: return(PnPConnection.GetConnectionWithToken(new SharePointToken(AccessToken), TokenAudience.SharePointOnline, InitializationType.Token, null, Url, disableTelemetry: NoTelemetry.ToBool())); } }
/// <summary> /// Connect using the parameter set AADWITHSCOPE /// </summary> /// <param name="credentials">Credentials to authenticate with for delegated access or NULL for application permissions</param> /// <returns>PnPConnection based on the parameters provided in the parameter set</returns> private PnPConnection ConnectAadWithScope(PSCredential credentials, AzureEnvironment azureEnvironment) { // Filter out the scopes for the Microsoft Office 365 Management API var officeManagementApiScopes = Enum.GetNames(typeof(OfficeManagementApiPermission)).Select(s => s.Replace("_", ".")).Intersect(Scopes).ToArray(); // Take the remaining scopes and try requesting them from the Microsoft Graph API var graphScopes = Scopes.Except(officeManagementApiScopes).ToArray(); PnPConnection connection = null; // If we have Office 365 scopes, get a token for those first if (officeManagementApiScopes.Length > 0) { var officeManagementApiToken = credentials == null?OfficeManagementApiToken.AcquireApplicationTokenDeviceLogin(PnPConnection.PnPManagementShellClientId, officeManagementApiScopes, PnPConnection.DeviceLoginCallback(this.Host, true), azureEnvironment) : OfficeManagementApiToken.AcquireDelegatedTokenWithCredentials(PnPConnection.PnPManagementShellClientId, officeManagementApiScopes, credentials.UserName, credentials.Password); connection = PnPConnection.GetConnectionWithToken(officeManagementApiToken, TokenAudience.OfficeManagementApi, InitializationType.InteractiveLogin, credentials, disableTelemetry: NoTelemetry.ToBool()); } // If we have Graph scopes, get a token for it if (graphScopes.Length > 0) { var graphToken = credentials == null?GraphToken.AcquireApplicationTokenDeviceLogin(PnPConnection.PnPManagementShellClientId, graphScopes, PnPConnection.DeviceLoginCallback(this.Host, true), azureEnvironment) : GraphToken.AcquireDelegatedTokenWithCredentials(PnPConnection.PnPManagementShellClientId, graphScopes, credentials.UserName, credentials.Password, AzureEnvironment); // If there's a connection already, add the AAD token to it, otherwise set up a new connection with it if (connection != null) { //connection.AddToken(TokenAudience.MicrosoftGraph, graphToken); } else { connection = PnPConnection.GetConnectionWithToken(graphToken, TokenAudience.MicrosoftGraph, InitializationType.InteractiveLogin, credentials, disableTelemetry: NoTelemetry.ToBool()); } } connection.Scopes = Scopes; return(connection); }