我有一个 Identity Server 4 的本地实例,我正在尝试按照本指南创建一个 Javascript 客户端。这使用了oidc-client-js库,并且我使用了登录弹出方法,因此我的登录事件处理程序如下所示:
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
上面代码中的对象应该包含用户声明,但它没有。这是use.profile
我回来的:
该sub
属性是刚刚通过身份验证的用户的正确 ID。但是我的身份服务器也发出声明以响应我的客户请求的其他范围(profile
和email
),所以我应该看到诸如name
,preferred_username
等声明email
。IProfileService
在 IS4 中调试我的实现时,我可以观察到这些声明被发出。此外,如果我使用access_token
返回的用户对象向另一个在本地运行的 API(ASP.NET Web API)发出请求,我确实会在以下位置看到这些声明this.User.Claims
:
那么如何在我的 Javascript 代码中获取这些声明呢?