我正在使用Identityserver4的vuejs客户端的代码流。我添加了RequirePkce
,我可以从oidc-client获得访问令牌和id令牌。但访问令牌aud
声明指向Identityserver4基址,而不是我的API资源。可能有什么问题吗?
委托单位:
new Client
{
ClientId = "js.admin",
ClientName = "admin dashboard vuejs client.",
RequirePkce = true,
RequireClientSecret = false,
RequireConsent = false,
AllowedGrantTypes = GrantTypes.Code,
AllowAccessTokensViaBrowser = true,
RedirectUris = new List<string>
{
"http://localhost:8080",
"http://localhost:8080/logincb.html",
"http://localhost:8080/silent-renew.html"
},
PostLogoutRedirectUris = new List<string>
{
"http://localhost:8080/",
"http://localhost:8080"
},
AllowedCorsOrigins = new List<string>
{
"http://localhost:8080"
},
AllowedScopes = new List<string>
{
"openid",
"role",
"profile",
"api1.rw",
"email",
"phone"
}
}
oidc客户端设置:
const clientSettings = {
userStore: new WebStorageStateStore({ store: window.localStorage }),
authority: STS_DOMAIN,
client_id: "js.admin",
redirect_uri: "http://localhost:8080/logincb.html",
automaticSilentRenew: true,
silent_redirect_uri: "http://localhost:8080/silent-renew.html",
response_type: "code",
scope: "openid profile api1.rw role email phone",
post_logout_redirect_uri: "http://localhost:8080/",
filterProtocolClaims: true
};
访问令牌已解码:
"iss": "http://localhost:5001",
"aud": "http://localhost:5001/resources",
正如你所看到的,发行者和受众的声明都是一样的,都是错误的。
但即使是瞄准镜也是正确的我真的很感激任何帮助。
Bearer was not authenticated. Failure message: IDX10214: Audience validation failed. Audiences: 'http://localhost:5001/resources'. Did not match: validationParameters.ValidAudience: 'api1' or validationParameters.ValidAudiences: 'null'.
这是我得到的最后一个错误。
1条答案
按热度按时间h79rfbju1#
http://localhost:5001/resources是一个通用资源,当您尚未定义任何ApiResources或将其与请求的ApiScope关联时,会添加该资源。
从文档here中可以看出:
使用仅作用域模型时,不会向令牌添加aud(受众)声明,因为此概念不适用。如果需要aud声明,可以在选项上启用EmitStaticAudienceClaim设置。这将以issuer_name/resources格式发出aud声明。如果需要对aud声明进行更多控制,请使用API资源。
要获取api1.rw作为您的受众,您需要将ApiResource添加到IdentityServer配置中。您可以将ApiResource和ApiScope*api1.rw**命名为
为了补充这个答案,我写了一篇博客文章,对这个主题进行了更详细的讨论:IdentityServer – IdentityResource vs. ApiResource vs. ApiScope