我使用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")
}
}
};
抱歉英语不好。
答案 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)
}
}
如果声明是由 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");
//..
}
你会看到,网站和中间名将开始出现