【发布时间】:2019-11-12 10:13:13
【问题描述】:
我在 asp.net core 2.2 中使用 IdentityServer4。
我的获取个人资料数据是:
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var sub = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(sub);
var principal = await _claimsFactory.CreateAsync(user);
var claims = principal.Claims.ToList();
claims.Add(new Claim(ClaimTypes.NameIdentifier, "fullname"));
context.IssuedClaims = claims;
}
我添加了如下客户端:
new Client
{
ClientId = "client",
ClientName = "Application",
AllowedGrantTypes = GrantTypes.Hybrid,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://localhost:45876/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:45876/signout-callback-oidc" },
AllowedCorsOrigins = new[] { "http://localhost:45876/" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"webapi"
},
AllowOfflineAccess = true
},
当我在客户端阅读声明时,我有一些声明并非全部主题。 NameIdentifier 为空?
httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
我的问题是什么?我该怎么办?
【问题讨论】:
-
我认为这里可能存在多个问题。首先,有两种代币和不同的受众。客户端使用与 api 不同的映射。此外,默认情况下,身份资源声明在身份令牌和访问令牌中均不可用。客户端应联系 UserInfo 端点以请求身份资源声明。对于 Mvc 客户端,您可以设置选项
GetClaimsFromUserInfoEndpoint以将身份资源声明包含到访问令牌中,或者按照 here 的说明使用配置包含它们。
标签: asp.net-core identityserver4 claims