.net core客户端未使用IdentityServer v3进行身份验证 - Audience中的Offset

时间:2017-03-08 11:25:41

标签: asp.net-core identityserver3

假设:

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时,一切正常,但我不确定如何正确处理?

1 个答案:

答案 0 :(得分:2)

原因是身份验证行为发生了变化。 IdentityServer 3不支持多个受众。 Identityserver 4可以。因此,旧处理LegacyAudienceValidation必须设置为true