Ejemplo n.º 1
0
        /// <inheritdoc/>
        public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken)
        {
            AuthenticationResult result = _tokenAcquisition.GetAuthenticationResultForAppAsync(requestContext.Scopes.First())
                                          .GetAwaiter()
                                          .GetResult();

            return(new AccessToken(result.AccessToken, result.ExpiresOn));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds an authorization header to an HttpRequestMessage.
        /// </summary>
        /// <param name="request">HttpRequest message to authenticate.</param>
        /// <returns>A Task (as this is an async method).</returns>
        public async Task AuthenticateRequestAsync(HttpRequestMessage request)
        {
            // Default options to settings provided during intialization
            var    scopes  = _initialOptions.Scopes;
            bool   appOnly = _initialOptions.AppOnly ?? false;
            string?tenant  = _initialOptions.Tenant ?? null;
            string?scheme  = _initialOptions.AuthenticationScheme ?? null;
            // Extract per-request options from the request if present
            TokenAcquisitionAuthenticationProviderOption?msalAuthProviderOption = GetMsalAuthProviderOption(request);

            if (msalAuthProviderOption != null)
            {
                scopes  = msalAuthProviderOption.Scopes ?? scopes;
                appOnly = msalAuthProviderOption.AppOnly ?? appOnly;
                tenant  = msalAuthProviderOption.Tenant ?? tenant;
                scheme  = msalAuthProviderOption.AuthenticationScheme ?? scheme;
            }

            if (!appOnly && scopes == null)
            {
                throw new InvalidOperationException(IDWebErrorMessage.ScopesRequiredToCallMicrosoftGraph);
            }

            AuthenticationResult authenticationResult;

            if (appOnly)
            {
                authenticationResult = await _tokenAcquisition.GetAuthenticationResultForAppAsync(
                    Constants.DefaultGraphScope,
                    authenticationScheme : scheme,
                    tenant : tenant).ConfigureAwait(false);
            }
            else
            {
                authenticationResult = await _tokenAcquisition.GetAuthenticationResultForUserAsync(
                    scopes !,
                    tenantId : tenant,
                    authenticationScheme : scheme).ConfigureAwait(false);
            }

            // add or replace authorization header
            if (request.Headers.Contains(Constants.Authorization))
            {
                request.Headers.Remove(Constants.Authorization);
            }

            request.Headers.Add(
                Constants.Authorization,
                authenticationResult.CreateAuthorizationHeader());
        }