【发布时间】:2017-09-13 12:56:34
【问题描述】:
我在尝试弄清楚如何正确使用 userinfo 端点时遇到了麻烦。我的示例使用身份服务器 4 作为授权服务器。
假设我有一个显示经过身份验证的用户位置的 js 应用程序。假设我有一些用户商店,它提供包括用户位置在内的声明。已实现 iprofileservice 接口,以便 GetProfileDataAsync 从用户存储中为用户检索用户声明。
js 应用需要有权访问用户的位置声明。一种方法是向 ids 添加一个身份资源,例如
new IdentityResource("test", new [] {"location"})
然后将范围添加到 js 客户端,例如
new Client
{
ClientId = "js",
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
"test"
}
}
然后配置 oidc 库以请求该范围,例如
var config = {
authority: "http://localhost:5000",
client_id: "js",
redirect_uri: "http://localhost:5003/callback.html",
response_type: "id_token token",
scope:"openid test",
post_logout_redirect_uri : "http://localhost:5003/index.html",
};
这样做意味着 id_token 将包含位置声明,并且可以作为用户个人资料的一部分进行访问。当使用身份验证期间收到的访问令牌调用 userinfo 端点时,将返回相同的声明。
但是我反复阅读 (here, for instance),您应该在身份令牌中放入尽可能少的声明,然后使用 userinfo 端点检索其他声明。链接的文章似乎暗示此行为在身份服务器中默认可用。
所以为了做到这一点,使用我上面提到的示例代码,我将从 oidc 配置的请求范围中删除“测试”范围。这意味着 id 令牌将不再填充位置声明。但是,当调用 userinfo 端点时,“测试”范围不在访问令牌中,因此不会将位置声明放入响应中。
基本上我的问题是你应该如何要求从 id 令牌中省略声明,但从 userinfo 端点返回?
oidc 规范似乎也暗示您应该能够使用“claims”请求参数来请求特定的声明,但我找不到任何关于身份服务器(或 auth0 的文档)的文档问题)。
【问题讨论】:
标签: openid identityserver4 openid-connect