并非所有在GetProfileDataAsync中添加的自定义声明都显示在标识

时间:2018-03-09 01:19:23

标签: asp.net-core-2.0 identityserver4 claims

我正在尝试通过ProfileService GetProfileDataAsync添加一些自定义声明。然而,其中一些人出来了别人。

我有来自ProfileServic< ApplicationUser>的自定义配置文件服务。我重写了GetProfileDataAsync,如下所示:

public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
    await base.GetProfileDataAsync(context);

    context.IssuedClaims.Add(new Claim("given_name", "Joe"));
    context.IssuedClaims.Add(new Claim("nickname", "jd"));
    context.IssuedClaims.Add(new Claim("preferred_username", "Doe"));
    context.IssuedClaims.Add(new Claim("sessionLife", "30"));
}

我希望我的身份还有四件额外的索赔。但我只得到一个:given_name。在我的客户端应用配置中,我请求了配置文件范围我希望昵称和preferred_username都出现,因为它们位于配置文件的资源组中。与given_name相同。昵称和preferred_username只是没有出来。我还需要克服其他一些过滤器吗?另请注意,最后一个声明:sessionLife未在IdentityClaims表中定义。我也可以得到它。我需要为它定义一个新的identityClaim和身份资源吗?

对于aaronR的请求,这是客户端代码:

services.AddAuthentication(options => {
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect(o =>
{
    o.Authority = idpUrl;
    o.RequireHttpsMetadata = false;
    o.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    o.ClientId = "mvc";
    o.ClientSecret = "secret";
    o.Scope.Add("email");                   
    o.Scope.Add("api1");
    o.Scope.Add("profile");                 //Your user profile information(first name, last name, etc.)
    o.Scope.Add("offline_access");
    o.ResponseType = "code id_token";
    o.GetClaimsFromUserInfoEndpoint = true;
    o.SaveTokens = true;
});

0 个答案:

没有答案