我已经创建了IdentityServer4应用程序,如果我在该应用程序中登录,则用户声称一切正常。如果我从另一个客户端应用程序(MVC)登录,则UserInfo端点不会返回相同的声明。
IdentityServer配置有ASP.NET身份,因此UserProfile已配置为返回所有UserClaims,就像我创建的一样。
我不明白为什么它没有显示在同意视图上或为什么不包含在UserInfo端点结果中
答案 0 :(得分:1)
您配置了IdentityResources
吗?
像这样:
services.AddIdentityServer()
.AddInMemoryIdentityResources(GetIdentityResources())
//where
public static List<IdentityResource> GetIdentityResources()
{
// Claims automatically included in OpenId scope
var openIdScope = new IdentityResources.OpenId();
openIdScope.UserClaims.Add(JwtClaimTypes.Locale);
// Available scopes
return new List<IdentityResource>
{
openIdScope,
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource(Constants.RolesScopeType, Constants.RolesScopeType,
new List<string> {JwtClaimTypes.Role, Constants.TenantIdClaimType})
{
//when false (default), the user can deselect the scope on consent screen
Required = true
}
};
}
答案 1 :(得分:1)
请检查以下几点是否可以解决您的问题
1。)您的身份资源和API资源应具有必需的UserClaims。
2。)检查配置文件服务中是否存在一些自定义逻辑来为userinfo端点发出请求的声明。
public class ProfileService : IProfileService
{
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
if (context.Caller == IdentityServerConstants.ProfileDataCallers.UserInfoEndpoint)
{
//custom logic to add requested claims
context.AddRequestedClaims(claims);
}
}
}
3。)尝试在MVC客户端的AddOpenIdConnect配置中使属性“ GetClaimsFromUserInfoEndpoint = true”。