我一直试图用AspNetIdentity设置一个新的IdentityServer3几天了.我能够使用我现有的Identity DB登录,这一切都很好,但我永远无法获得包含数据的User.Identity.Name.我尝试过多次尝试添加自定义声明和范围以及向客户端添加范围.
最后,我加载了IdentityServer3示例存储库,并使用webforms客户端项目对其进行了测试,因为它已在其"关于"页面中使用了User.Identity.Name.
使用WebForms示例客户端+ AspNetIdentity示例服务器= User.Identity.Name始终为null使用带有Seq示例服务器的WebForms示例客户端+ SelfHost =带有数据的User.Identity.Name我尝试了其他所有填充User.Identity的示例宿主项目.Name值就好了.
现在,在客户端,我写了一个解决方法来提取'preferred_username'声明值并用它设置'name'声明.
var id = new claimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType);
id.AddClaims(userInfoResponse.GetClaimsIdentity().Claims);
//set the User.Identity.Name value
var name = id.Claims.Where(x => x.Type == "name").Select(x => x.Value).FirstOrDefault() ??
id.Claims.Where(x => x.Type == "preferred_username").Select(x => x.Value).FirstOrDefault();
id.AddClaim(new Claim("name", name));
Run Code Online (Sandbox Code Playgroud)
我的问题是: