我正在尝试基于此实现JWT授权article 。 我还需要让特定用户(管理员)模拟其他用户(客户端)。
我在这里看到两种可能性:
- 使用管理 token 发出管理请求,并将模拟的 client_id 添加到每个请求中;
- 为管理员请求一个新 token ,该 token 将在其有效负载中包含客户端的用户名和角色,因此它基本上会成为客户端 token ,但它还有两个额外的字段:“impersonated=true”和“impersonator_admin_id” =x”。
我更喜欢第二个,因为将 .net 内置授权属性与客户端角色一起使用会更容易。 但我不确定这是否会带来安全漏洞,或者是否可以使用 .Net 的 OAuthAuthorizationServer 来实际实现。
最佳答案
从您的链接中,首先确定管理员是否冒充用户或代表用户行事。请注意代表!=冒充
当 A 保持自己的身份并获得 B 的所有权利时,A 代表 B 行事
A 冒充 B,但实际上 A 就是 B
在 JWT RFC没有为此目的定义任何具体的权利要求。在此draft作者建议添加代表 claim obo
{"obo": {
"prn":"mailto:joe@example.com",
"ctx":["urn:adatum.com:calendar"]
}}
prn
标识 JWT 持有者所代表的委托(delegate)人。ctx
建立允许持有者代表主体行事的权限上下文。该主张应强制限制行使委托(delegate)权利的背景
请注意,obo
声明不包含在 IANA's JSON Web Token Claims 中。 ,因此应将它们视为推荐。 OpenID 中有类似的声明 azp
但不清楚如何应用它
azp
:授权方 - 向其颁发 ID token 的一方
回答你的问题,在第一种情况下,我认为你正在谈论代表行为,因此请包括 client_id 和安全上下文。第二种情况是冒充。
关于asp.net - 使用 JWT 进行模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41747705/