我正在尝试通过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;
});