假设:
IdentityServer v3 JavaSCript客户端 Asp Core Api客户端
JavaScript客户端使用身份服务器进行身份验证,并使用持有者令牌向api
发出请求api配置为使用ressource owner workflow
问题: 现在我明白了:
观众:“http://localhost/identity/resources”。不匹配: validationParameters.ValidAudience:'MyApi'或 validationParameters.ValidAudiences:'null'
显而易见,Audiance不匹配。 我错过了什么?
配置
身份服务器中的ApiClient:
return new Client
{
Enabled = true,
ClientId = "MyApi",
ClientName = "The client for the Groupl Api",
ClientSecrets = new List<Secret>
{
new Secret("foo".Sha256())
},
Flow = Flows.ResourceOwner,
AllowedScopes = ClientConstants.AllowedGrouplScopes()
};
在api中连接到身份服务器:
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
var authority = config["identity:authority:url"];
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = authority,
RequireHttpsMetadata = false,
EnableCaching = false,
ApiName = "myApi", //Correct that this is the client id?
ApiSecret = "foo"
});
这里的请求(省略了Access_token)
GET /api/values HTTP/1.1
Host: localhost:59364
Content-Type: application/json
Authorization: Bearer {access_token}
更新
当我设置LegacyAudienceValidation = true
时,一切正常,但我不确定如何正确处理?
答案 0 :(得分:2)
原因是身份验证行为发生了变化。 IdentityServer 3不支持多个受众。 Identityserver 4可以。因此,旧处理LegacyAudienceValidation
必须设置为true