private static void ValidateTokenProviderResult(TokenProviderResult TokenProviderResult) { if (string.IsNullOrEmpty(TokenProviderResult.AccessToken)) { HandleInvalidExternalValueError(nameof(TokenProviderResult.AccessToken)); } if (TokenProviderResult.ExpiresInSeconds == 0 || TokenProviderResult.ExpiresInSeconds < 0) { HandleInvalidExternalValueError(nameof(TokenProviderResult.ExpiresInSeconds)); } if (string.IsNullOrEmpty(TokenProviderResult.TenantId)) { HandleInvalidExternalValueError(nameof(TokenProviderResult.TenantId)); } }
private async Task <MsalTokenResponse> SendTokenRequestToProviderAsync(CancellationToken cancellationToken) { AppTokenProviderParameters appTokenProviderParameters = new AppTokenProviderParameters { Scopes = GetOverriddenScopes(AuthenticationRequestParameters.Scope), CorrelationId = AuthenticationRequestParameters.RequestContext.CorrelationId.ToString(), Claims = AuthenticationRequestParameters.Claims, TenantId = AuthenticationRequestParameters.Authority.TenantId, CancellationToken = cancellationToken, }; TokenProviderResult externalToken = await ServiceBundle.Config.AppTokenProvider(appTokenProviderParameters).ConfigureAwait(false); var tokenResponse = MsalTokenResponse.CreateFromAppProviderResponse(externalToken); tokenResponse.Scope = appTokenProviderParameters.Scopes.AsSingleString(); tokenResponse.CorrelationId = appTokenProviderParameters.CorrelationId; return(tokenResponse); }
internal static MsalTokenResponse CreateFromAppProviderResponse(TokenProviderResult tokenProviderResponse) { ValidateTokenProviderResult(tokenProviderResponse); var response = new MsalTokenResponse { AccessToken = tokenProviderResponse.AccessToken, RefreshToken = null, IdToken = null, TokenType = BrokerResponseConst.Bearer, ExpiresIn = tokenProviderResponse.ExpiresInSeconds, ClientInfo = null, TokenSource = TokenSource.IdentityProvider, TenantId = null //Leaving as null so MSAL can use the original request Tid. This is ok for confidential client scenarios }; response.RefreshIn = tokenProviderResponse.RefreshInSeconds; return(response); }