protected override bool TryGetTokenRequestContextFromChallenge(HttpMessage message, out TokenRequestContext context) { string authority = GetRequestAuthority(message.Request); string scope = AuthorizationChallengeParser.GetChallengeParameterFromResponse(message.Response, "Bearer", "resource"); if (scope != null) { scope = scope + "/.default"; } else { scope = AuthorizationChallengeParser.GetChallengeParameterFromResponse(message.Response, "Bearer", "scope"); } if (scope is null) { if (_scopeCache.TryGetValue(authority, out _scope)) { return(false); } } else { _scope = new AuthorityScope(authority, new string[] { scope }); _scopeCache[authority] = _scope; } context = new TokenRequestContext(_scope.Scopes, message.Request.ClientRequestId); return(true); }
private async ValueTask <bool> AuthorizeRequestOnChallengeAsyncInternal(HttpMessage message, bool async) { if (message.Request.Content == null && message.TryGetProperty(KeyVaultStashedContentKey, out var content)) { message.Request.Content = content as RequestContent; } string authority = GetRequestAuthority(message.Request); string scope = AuthorizationChallengeParser.GetChallengeParameterFromResponse(message.Response, "Bearer", "resource"); if (scope != null) { scope = scope + "/.default"; } else { scope = AuthorizationChallengeParser.GetChallengeParameterFromResponse(message.Response, "Bearer", "scope"); } if (scope is null) { if (_scopeCache.TryGetValue(authority, out _scope)) { return(false); } } else { _scope = new AuthorityScope(authority, new string[] { scope }); _scopeCache[authority] = _scope; } var context = new TokenRequestContext(_scope.Scopes, message.Request.ClientRequestId); if (async) { await AuthenticateAndAuthorizeRequestAsync(message, context).ConfigureAwait(false); } else { AuthenticateAndAuthorizeRequest(message, context); } return(true); }