Я столкнулся с проблемой.Я использую Microsoft Graph, чтобы получить текущего зарегистрированного пользователя через OnBehalfOfMsGraphAuthenticationProvider.cs
, как показано в следующем решении .
. Это работает безупречно, но я провел некоторый рефакторинг, ивнезапно я получаю сообщение об ошибке при попытке выполнить мой authContext.AcquireTokenAsync()
метод.
HTTP Error 502.3 - Bad Gateway
Рассматриваемый код выглядит следующим образом:
public async Task AuthenticateRequestAsync(HttpRequestMessage request) {
var httpContext = _httpContextAccessor.HttpContext;
//Get the access token used to call this API
string token = await httpContext.GetTokenAsync("access_token");
//We are passing an *assertion* to Azure AD about the current user
//Here we specify that assertion's type, that is a JWT Bearer token
string assertionType = "urn:ietf:params:oauth:grant-type:jwt-bearer";
//User name is needed here only for ADAL, it is not passed to AAD
//ADAL uses it to find a token in the cache if available
var user = httpContext.User;
string userName =
user.FindFirst(ClaimTypes.Upn).Value ?? user.FindFirst(ClaimTypes.Email).Value;
var userAssertion = new UserAssertion(token, assertionType, userName);
//Construct the token cache
var cache = new DistributedTokenCache(user, _distributedCache,
_loggerFactory, _dataProtectionProvider);
var authContext = new AuthenticationContext(_configuration["AzureAd:Instance"] +
_configuration["AzureAd:TenantId"], true, cache);
var clientCredential = new ClientCredential(_configuration["AzureAd:ClientId"],
(string) _configuration["AzureAd:ClientSecret"]);
//Acquire access token
var result = await authContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential, userAssertion); //This is where it crashes
//Set the authentication header
request.Headers.Authorization = new AuthenticationHeaderValue(result.AccessTokenType, result.AccessToken);
}
Я звоню из моего OrdersController
:
// POST: api/Orders
[HttpPost]
public async Task<IActionResult> CreateAsync([FromBody] OrderDTO order) {
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
var graphUser = await this.graphApiService.GetUserProfileAsync();
Рефакторинг заключался в разделении моего решения на два проекта библиотеки классов и один веб-проект - последний имеет контроллеры и приложение React.GraphAPiClient
и провайдер находятся в базовой библиотеке следующим образом:
Снимок экрана архитектуры