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));
            }
        }
Example #2
0
        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);
        }