SecurityTokenInvalidAudienceException при вызове. NET Framework API с использованием токена-носителя IdentityServer4 - PullRequest
0 голосов
/ 20 февраля 2020

Для контекста:

  • Поставщик удостоверений работает на IdentityServer4
  • API работает. NET Framework 4.6.1 использует расширение IdentityServer3.AccessTokenValidation для связи с сервером удостоверений.
  • Получение действительного токена доступа для пользователя с сервера идентификации с использованием кода авторизации + поток PKCE

Когда я вызываю API с токеном доступа, API отклоняет токен доступа с помощью следующее сообщение об ошибке:

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Error: 0 : Authentication failed
System.IdentityModel.Tokens.SecurityTokenInvalidAudienceException: IDX10214: Audience validation failed. Audiences: '<apiResourceName>'. Did not match: validationParameters.ValidAudience: '<identityProviderBaseUri>/resources' or validationParameters.ValidAudiences: 'null'
   at System.IdentityModel.Tokens.Validators.ValidateAudience(IEnumerable`1 audiences, SecurityToken securityToken, TokenValidationParameters validationParameters)
   at System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateAudience(IEnumerable`1 audiences, SecurityToken securityToken, TokenValidationParameters validationParameters)
   at System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateToken(String securityToken, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
   at Microsoft.Owin.Security.Jwt.JwtFormat.Unprotect(String protectedText)
   at Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationHandler.<AuthenticateCoreAsync>d__0.MoveNext()

Я не могу сказать, что я должен изменить, вот содержимое JWT, который я передаю:

{
  "nbf": 1582197029,
  "exp": 1582200629,
  "iss": "<identityProviderBaseUri>",
  "aud": "<apiResourceName>",
  "client_id": "<clientId>",
  "sub": "<userId>",
  "auth_time": 1582197028,
  "idp": "local",
  "email": "<userEmail>",
  "scope": [
    "openid",
    "profile",
    "<apiResourceName>",
    "offline_access"
  ],
  "amr": [
    "pwd"
  ]
}

А вот мое использование IdentityServer3 в. NET Framework API:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
    Authority = "<identityProviderBaseUri>",
    RequiredScopes = new string[] { "<apiResourceName>" }
});

Есть идеи, почему промежуточное ПО отклоняет мой маркер доступа? Примеры, которые я нашел (включая быстрый запуск identityserver4), отражают вышесказанное - хотя быстрый запуск предоставляет свойство аудитории, а не «RequiredScopes»; другие SO сообщения, которые я обнаружил, похоже, не соответствуют моей проблеме.

Если какая-либо дополнительная информация будет полезна, сообщите мне.

Спасибо

Редактировать: Удалена ссылка на локальный хост для согласованности

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