Только на голову: Этот вопрос не является дубликатом Этот , поэтому, пожалуйста, не отмечайте этот вопрос как дубликат.
Я поставилкод веб-API, который использует Azure Active Directory для аутентификации в Visual Studio 2019 и затем этот документ для настройки базового приложения с поддержкой лесов с использованием записей конфигурации моего клиента Azure AD B2C.
СлужбаМетод конфигурации выглядит следующим образом:
public void ConfigureServices(IServiceCollection services)
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
services
.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Файл конфигурации содержит следующую запись конфигурации AzureAd, в которой я замаскировал действительные идентификаторы:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "testdirectoryv44.onmicrosoft.com",
"TenantId": "1234abcdef......,
"ClientId": "abcdef567....."
}
Запустив поток пользователя в Azure. Портал, я получаю токен и могу декодировать токен с помощью https://jwt.ms, и это здорово. Тем не менее, я получаю следующее сообщение об ошибке при вызове этого запроса GET: https://localhost:44362/api/values
от POSTMAN, когда он включает маркер носителя в заголовок при размещении запроса: (сообщение об ошибке отображается в области вывода VS 2019)
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: Информация: не удалось проверить токен.
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: сбой IDX10501. Невозможно сопоставить ключи: kid: 'ABCDEF .........', токен: '{"typ": "JWT", "alg": "RS256", "kid": "ABCDEF .... ..... "}. {" exp ": 1572358190," nbf ": 1572354590," ver ":" 1.0 "," iss ":" https://testdirectoryv44.b2clogin.com/abcdef1234556/v2.0/","sub":"8799abcdef0000","aud":"89000abcdecf999,"nonce":"defaultNonce","iat":1572354590,"auth_time":1572354590,"idp_access_token":"BIGMASKEDVALUE","idp":" https://sts.windows.net/abcdef11234.../","name":"MyName","extension_InternalKey":"KEY400","given_name":"MyName","family_name":"MyFamily","extension_InternalUserId":"guest","tfp":"B2C_1_testdirectoryv44"}'. в System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature (String token, TokenValidationParameters validationParameters) в System.IdentityModel.Tokens.Jwt. AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync () Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: Информация: AzureADJwtBearer не была аутентифицирована. Сообщение об ошибке: IDX10501: Ошибка проверки подписи. Невозможно сопоставить ключи: kid: 'REMOVED AREAD'. Microsoft.AspNetCore.Routing.EndpointMiddleware: Информация: выполнение конечной точки 'WebApplication5.Controllers.ValuesController.Get (WebApplication5)' Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Информация: Маршрут соответствует {action = "Get", контроллер =«}. Выполнение действия контроллера с подписью Microsoft.AspNetCore.Mvc.ActionResult 1[System.Collections.Generic.IEnumerable
1 [System.String]] Get () для контроллера WebApplication5.Controllers.ValuesController (WebApplication5). Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Информация: авторизация не удалась. Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Информация: авторизация не выполнена для запроса в фильтре «Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter». Microsoft.AspNetCore.Mvc.ChallengeResult: Информация: Выполнение ChallengeResult со схемами аутентификации (). Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: Информация: Схема аутентификации: AzureADJwtBearer подвергся сомнению. Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Информация: выполненное действие WebApplication5.Controllers.ValuesController.Get (WebApplication5) в 22.7988ms. 'Microsoft.AspNetCore.Hosting.Internal.WebHost: Информация: запрос завершен в 792.0596ms 401
Код веб-API-интерфейса так же прост, как и следующий фрагмент кода, который создается Visual Studio 2019:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
}
Уже пару дней я трачу время на выяснение первопричины этого сбоя, но пока безуспешно. Какой момент я пропускаю в коде или в конфигурации Azure AD, вызывающего эту проблему, и почему https://jwt.ms может успешно декодировать токен?