我有一个身份服务器4的本地实例,我正在尝试遵循本指南来创建Javascript客户端。这使用了oidc-客户端js库,我使用的是signin弹出方法,所以我在事件处理程序中的签名如下所示:
signin(e) {
e.preventDefault();
this.oidcUserMgr.signinPopup({state:'some data'}).then(function(user) {
console.log("signed in", user.profile);
}).catch(function(err) {
console.log(err);
});
} 身份验证看起来很好--我被重定向到身份服务器,它接受客户端请求,验证我的登录,并将我返回到客户端应用程序。但是,文档指出,上面代码中的user.profile对象应该包含用户声明,但它不包含。

sub属性是刚刚通过身份验证的用户的正确ID。但是,我的身份服务器也针对我的客户请求的其他范围(profile和email)发出声明,所以我应该看到诸如name、preferred_username、email等的声明。我可以观察到在IS4中调试我的IS4实现时发出的这些声明。此外,如果我使用user对象返回的access_token向本地运行的另一个API ( ASP.NET Web )发出请求,我确实在this.User.Claims中看到了这些声明

那么,如何才能在我的Javascript代码中获得这些声明呢?
发布于 2018-03-13 00:50:14
这些用户声明可能在ID令牌中。要做到这一点,请检查您的IDP提供者的客户端配置中是否有AlwaysIncludeUserClaimsInIdToken = true,如
public static IEnumerable<Client> GetClients()
{
return new List<Client>()
{
new Client()
{
ClientName = "IDP Client",
ClientId = "client",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.Hybrid,
RedirectUris = new List<string>()
{
"http://localhost:60811/signin-oidc"
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"myapi"
},
AlwaysIncludeUserClaimsInIdToken = true,
AllowOfflineAccess = true
},https://stackoverflow.com/questions/49231189
复制相似问题