身份服务器3的Asp.net核心客户端缺少索赔

时间:2017-03-20 09:14:22

标签: asp.net-web-api asp.net-core identityserver3 oidc

假设:

  • 使用oidc over identityerver v3
  • 进行身份验证的JavaScript应用
  • Asp.net 核心 Webapi,使用给定的承载令牌进行身份验证以识别服务器

Javascript客户端使用访问令牌本身调用api。

问题:

身份验证超过但已恢复的主体缺少某些自定义声明,如"用户名"和" familyName"。我可以看到javascript客户端中的oidc客户端有这些信息

有些声称喜欢" idp"在Javascript和Api客户端中都设置了。但机器人没有明确处理。

主要区别在于idp是access_token的一部分,用户名不是。

api的配置是:

  JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            var authority = config["identity:authority:url"];
            app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
            {
                LegacyAudienceValidation = true,
                Authority = authority,
                RequireHttpsMetadata = false,
                EnableCaching = false,
                ApiName = "MyApp.Read",
            });

任何暗示我失踪的东西? (我假设它是在api中读取的某种配置文件?)

解决方法

我使用JwtBearerEvents扩展配置,并在对令牌进行身份验证时使用userclient进行手动读取

  JwtBearerEvents = new JwtBearerEvents
                {
                    OnTokenValidated = async context =>
                    {
                        string header = context.Request.Headers["Authorization"];
                        string accessToken = header.Substring(6);
                        var result = await userInfoClient.GetAsync(accessToken);

但这是预期的方式吗?扩展/配置文件声明是否只能通过手动查询来返回?

0 个答案:

没有答案