2

Я получаю это исключение при попытке аутентификации JwtBearerAuthentication:ASP.NET Ядро RC2 JWT Токен KID ошибка

Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: Failed to validate the token eyJhbGciOiJSUzI1NiIsImtpZCI6IldYVDdGSUU3SlI5U1A0R09SUlVJSUMxX0pSTDJPVkhNRzkyVjFYVl8iLCJ0eXAiOiJKV1QifQ.eyJNYXN0ZXIiOiIxIiwiY2FzYSI6IjEiLCJ1bmlxdWVfbmFtZSI6InRlc3RlIiwianRpIjoiOWNiYmUzMDEtYjdhYy00MDQ5LTlhZjAtNzQ2MzhhNDZiYjg5IiwidXNhZ2UiOiJhY2Nlc3NfdG9rZW4iLCJjb25maWRlbnRpYWwiOnRydWUsInNjb3BlIjoib2ZmbGluZV9hY2Nlc3MiLCJzdWIiOiI4ZDRmNTdiOS1kMDk0LTRhYmUtOTcxNi03Y2Y1NTcyYTg0M2EiLCJhenAiOiJkdXgiLCJuYmYiOjE0NjQyODM1ODYsImV4cCI6MTQ2NDI4NzE4NiwiaWF0IjoxNDY0MjgzNTg2LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjUwMDAvIn0.nzT0K30EIbhW4OX4sq3w038c6C5U8LzJHMwszMVFvc6J18aaTUMuKx1txTzUnscZvTcHoMTV7Dyvlj9qCoVpJjnQmqhlP8Q2g-gVSPzKmX6TxB9lT4IF1hrneGj-4p1vRr9HRWb1JftMMnLwY1tfxJYcofvRTBzdofSfVtKRB1FR215VRFxUb8x4ipnICexZiSELEEC8GIN2koOVzoUAMZLQIkTVtKXV7gwi-lF0ECZem28FQ4ar2cmZPrQr0z0B8b-YemPhcLzJplIdCpDx8XHhLIIqLWO5ep7cK29HON8_LobvbXDCXrwUqJbNt2m5wtKYJ5qodfL5aWeo9Y09Wg. 

Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed. Unable to match 'kid': 'WXT7FIE7JR9SP4GORRUIIC1_JRL2OVHMG92V1XV_', 
token: '{"alg":"RS256","typ":"JWT","kid":"WXT7FIE7JR9SP4GORRUIIC1_JRL2OVHMG92V1XV_"}.{"Master":"1","casa":"1","unique_name":"teste","jti":"9cbbe301-b7ac-4049-9af0-74638a46bb89","usage":"access_token","confidential":true,"scope":"offline_access","sub":"8d4f57b9-d094-4abe-9716-7cf5572a843a","azp":"dux","nbf":1464283586,"exp":1464287186,"iat":1464283586,"iss":"http://localhost:5000/"}'. 
    at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters) 
    at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken) 
    at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() 
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Error: Exception occurred while processing message. 

Я использую OpenIdConnectServer выдавать жетоны

 // Add a new middleware issuing tokens. 
     app.UseOpenIdConnectServer(options => 
     { 
      options.AllowInsecureHttp = true; 
      options.Provider = new AuthorizationProvider(); 
      options.UseJwtTokens();     
     }); 

     // Add a new middleware validating access tokens issued by the server. 
     app.UseJwtBearerAuthentication(new JwtBearerOptions 
     { 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      RequireHttpsMetadata = false,         
      TokenValidationParameters = new TokenValidationParameters 
      { 
       ValidateAudience = false, 
       ValidateIssuer = false, 
       ValidateIssuerSigningKey = false 
      } 
     }); 
+0

Добавления больше деталей будет полезно: вы используете свое приложение за IIS? IIS Express? Вы видите предупреждение в окне вывода во время запуска? – Pinpoint

+0

@Pinpoint Я запущен на Kestrel, и я получаю сообщение «Нет явных учетных данных для регистрации». «Существующий ключ был автоматически добавлен в список учетных данных для подписания» –

+0

@Pinpoint Раньше он работал на RC1, но я устанавливал значение TokenValidationParameter.ValidateSignature равным false (похоже, он больше не существует) –

ответ

2

По некоторым причинам , IdentityModel (библиотека, лежащая в основе промежуточного программного обеспечения для проводника JWT), по-видимому, игнорирует вашу директиву ValidateIssuerSigningKey = false (что очень плохо на практике, поскольку каждый может подделать поддельный токен, который будет принят промежуточным программным обеспечением JWT-носителя).

Чтобы устранить эту проблему (и сделать API действительно безопасным), настроить Authority свойства, чтобы носитель промежуточного JWT для загрузки ключа подписи с сервером промежуточного слоя OpenID Connect:

app.UseJwtBearerAuthentication(new JwtBearerOptions { 
    Authority = "http://localhost:5000/", // base address of your OIDC server. 
    Audience = "http://localhost:5000/", // base address of your API. 
    RequireHttpsMetadata = false 
}); 
+0

Благодарим вас за этот ответ и за создание этого потрясающая реализация OpenIdConnect :) –

+0

Ха-ха, спасибо за добрые слова! В связи с тем, что ваш сервер авторизации и ваш API являются частью одного и того же приложения, вы можете попробовать новое промежуточное программное обеспечение для проверки и использовать непрозрачные токены (новый формат по умолчанию). В отличие от промежуточного программного обеспечения для проводника JWT, промежуточное программное обеспечение проверки не требует установки полномочий/аудитории: http://stackoverflow.com/a/33147208/542757 – Pinpoint

+1

Я также получаю эту же ошибку после обновления до платформы ASP.NET Core 1.0 RTM , Поначалу кажется, что этот ответ не решает проблему. Что именно парень, который не соответствует? –

Смежные вопросы