Получение сообщения об ошибке IDX10501: Проверка подписи не удалась. Невозможно сопоставить ключи при использовании Azure AD - PullRequest
0 голосов
/ 29 октября 2019

Только на голову: Этот вопрос не является дубликатом Этот , поэтому, пожалуйста, не отмечайте этот вопрос как дубликат.

Я поставилкод веб-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 может успешно декодировать токен?

1 Ответ

1 голос
/ 30 октября 2019

Обратите внимание, что Azure AD отличается от Azure AD B2C.

Метод настройки службы

public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

appsettings.json

{
  "AzureAdB2C": {
    "Instance": "https://tony**test.b2clogin.com/tfp/",
    "ClientId": "5eaf724c-a61e-***-a217-44ffd45f9dfe",
    "Domain": "tony**test.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_testsignupin"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Вы можете следовать этомуподробный учебник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...