身份服务器4不显示所有用户声明

时间:2018-04-02 16:29:31

标签: c# identityserver4

我使用IdentityServer4,一切正常,直到我与一些用户登录,我的所有用户数据都没有出现。

当输入名称,电子邮件,网站,年龄,游戏喜爱的声明的TestUser时,它只显示名称和网站。

如何显示用户拥有的所有变体?

return new List < TestUser > {
 new TestUser {
  SubjectId = "2",
   Username = "bob",
   Password = "password",
   Claims = new [] {
    new Claim("name", "Bob Asterman"),
     new Claim("e-mail", "bobasterman@gmail.com"),
     new Claim("website", "https://bob.com"),
     new Claim("idade", "25 anos"),
     new Claim("jogo-favorito", "nier-automata")
   }
 }
};

抱歉英语不好。

2 个答案:

答案 0 :(得分:3)

默认情况下不包含声明<style name="MyAppTheme" parent="Theme.AppCompat"> <!-- ... --> <item name="windowActionBar">false</item> </style> 。您需要通过在config.cs中的access_log /var/log/nginx/access.log; 方法中添加您的范围来将其作为自定义声明引入:

然后,您必须使用idade中的GetScopes媒体资源将此新范围添加到Client。cs示例:

AllowedScopes

答案 1 :(得分:0)

如果身份资源与非标准声明(例如 myclaim1)相关联,则在客户端添加以 JSON 格式显示的声明(从 userinfo 端点返回)与用户声明之间的 ClaimAction 映射。

    using Microsoft.AspNetCore.Authentication
    // ...
    .AddOpenIdConnect("oidc", options =>
    {
        // ...
        options.ClaimActions.MapUniqueJsonKey("myclaim1", "myclaim1");
        // ...
    });

详情

就我而言,当我将 MiddelName 添加到 TestUser 时,它没有显示在屏幕上:

new TestUser
                    {
                        SubjectId = "88421113",
                        Username = "bob",
                        Password = "bob",
                        Claims =
                        {
                            new Claim(JwtClaimTypes.Name, "Bob Smith"),
                            new Claim(JwtClaimTypes.GivenName, "Bob"),
                            new Claim(JwtClaimTypes.FamilyName, "Smith"),
                            new Claim(JwtClaimTypes.Email, "BobSmith@email.com"), 
                            //MiddleName added later
                            new Claim(JwtClaimTypes.MiddleName, "Bob's middle Name"), 
                            new Claim(JwtClaimTypes.EmailVerified, "true", ClaimValueTypes.Boolean),
                            new Claim(JwtClaimTypes.WebSite, "http://bob.com"),
                            new Claim(JwtClaimTypes.Address, JsonSerializer.Serialize(address), IdentityServerConstants.ClaimValueTypes.Json)
                        }
                    }

enter image description here

如果声明是由 userinfo 返回的,则 ClaimsActions 用于将声明从返回的 JSON 文档映射到主体。此处使用以下默认设置:

ClaimActions.MapUniqueJsonKey("sub", "sub");
ClaimActions.MapUniqueJsonKey("name", "name");
ClaimActions.MapUniqueJsonKey("given_name", "given_name");
ClaimActions.MapUniqueJsonKey("family_name", "family_name");
ClaimActions.MapUniqueJsonKey("profile", "profile");
ClaimActions.MapUniqueJsonKey("email", "email");

如果您向客户端发送不在上述列表中的声明,它会被忽略,您需要进行显式映射。假设您的客户端应用程序通过 userinfo 接收网站声明(标准 OIDC 声明之一,但遗憾的是未映射)——您需要自己添加映射:

options.ClaimActions.MapUniqueJsonKey("website", "website");

这同样适用于您通过 userinfo 返回的任何其他声明。 在客户端打开 Startup.cs 并在 ConfigureServices 方法中为 MiddleName 应用上述步骤:

 public void ConfigureServices(IServiceCollection services)
{
//...

options.ClaimActions.MapUniqueJsonKey("middle_name", "middle_name");

//..
}

你会看到,网站和中间名将开始出现

enter image description here

参考: Interactive Applications with ASP.NET Core