【发布时间】:2018-08-20 05:37:52
【问题描述】:
我有一个 Identity Server 4 的本地实例,我正在尝试关注 this guide 来创建一个 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。但是我的 Identity Server 也针对我的客户请求的其他范围(profile 和 email)发布了声明,因此我应该看到诸如 name、preferred_username、email 等声明。在 IS4 中调试我的IProfileService 实现时,我可以观察到这些声明。此外,如果我使用与用户对象一起返回的 access_token 向本地运行的另一个 API(ASP.NET Web API)发出请求,我确实在 this.User.Claims 中看到了这些声明:
那么如何在我的 Javascript 代码中获取这些声明?
【问题讨论】:
-
您能否使用应该是标准 openId Connect 实现的 userinfo 端点。该 api 应该返回您所需的所有响应?
-
@Sohan 我的假设是 openid-connect-js 库已经这样做了,因为 IS4 文档建议它应该使用请求的声明填充 user.profile。
-
您是否在 JSapp 和数据库 [ClientScopes] 中设置了范围?您的应用需要请求它们,以便它们响应。
-
@getsetcode 很抱歉在这里问,但是,您如何在外部 API 项目中获得这些用户声明(姓名、电子邮件等)?当我在 ApiController 中访问
this.User.Claims时,我看不到那些用户声明,只有“基本”客户端声明。
标签: javascript asp.net identityserver4 openid-connect oidc-client-js