В токене доступа отсутствует утверждение aud
По неизвестной мне причине утверждение "aud" отсутствует в токене доступа (хотя оно присутствует в токене идентификатора).
Как только токен доступа отправляется в API, я получаю следующую ошибку:
Носитель не был аутентифицирован. Сообщение об ошибке: IDX10214: Ошибка проверки аудитории. Аудитории: "пустые". Не соответствует: validationParameters.ValidAudience: 'productconfigurationapi' или validationParameters.ValidAudiences: 'null'.
Я знаю, что могу отключить проверку аудитории, и тогда все будет работать, но я не понимаю, почему "aud" не является частью токена доступа.
Вот моя конфигурация IS4:
клиент:
new Client
{
ClientId = "Spa",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
AlwaysSendClientClaims = true,
AlwaysIncludeUserClaimsInIdToken = true,
AccessTokenType = AccessTokenType.Jwt,
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"productconfigurationapi"
},
RequireConsent = false
}
ресурс api:
new ApiResource("productconfigurationapi")
{
UserClaims =
{
JwtClaimTypes.Audience
}
}
Область применения API:
return new List<ApiScope>
{
new ApiScope("productconfigurationapi")
};
и вот как IS4 настроен в своем хост-приложении:
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddConfigurationStore(options =>
{
})
.AddOperationalStore(options =>
{
})
.AddAspNetIdentity<IdentityUser>()
.AddJwtBearerClientAuthentication();
1 ответ
Вы должны привязать ApiScope к ApiResource, установив свойство Scopes:
var api = new ApiResource("productconfigurationapi")
{
UserClaims =
{
JwtClaimTypes.Audience
},
Scopes = new List<string>
{
"productconfigurationapi"
},
};