【发布时间】:2020-07-06 20:36:54
【问题描述】:
谁能帮助我了解如何将 array 添加到 identityserver4 的 jwt 令牌,格式如下。
如果数组不包含数据:{ "custom_data" : [] }
如果数组包含一个元素:{“custom_data”:[“one_element”]}
如果数组包含多个元素:{ "custom_data" : ["first element","second element"]}
我已尝试使用 IProfileService 并使用 Claims
添加数据
示例代码:
foreach (string element in my_array) {
userClaims.Add(new Claim("custom_data" , element));
}
但在这种情况下,我得到如下:
如果数组不包含数据:{ } 这里我没有得到任何数据
如果数组包含一个元素:{“custom_data”:“one_element”} 这里我将其作为字符串获取
如果数组包含多个元素:{ "custom_data" : ["first element","second element"]} 这里我的方法是正确的
【问题讨论】:
-
这种方法有什么问题? IdSrv 跳过空键以保持令牌小(每个请求可以发送的标头大小有限)?它也没有问题,因为 Claims Principal 扩展方法将通过
User.HasClaim("custom_data")方法检查它是否存在。空声明被丢弃,单个声明作为字符串和数组以及数组传递,因为这使用了尽可能少的字符 -
感谢@Tseng 的回答。但是除了使用 Claims 之外,还有其他方法可以向令牌添加数据吗?
-
您尝试过 UserInfo 端点吗?它的行为完全符合您的要求。
-
JWT 令牌由“仅声明”组成,并且应仅包含有关身份令牌上的人的身份(子、姓名、电子邮件、性别等)和访问令牌上的范围的信息。 JWT 不能传输权限或类似的东西
-
高度依赖于这些数据是什么。如果其数据经常更改,只需让您的应用程序管理它,即如果它应该是权限,您将其存储在您的应用程序(而不是身份服务器应用程序)中并使用
sub(唯一用户 ID)查询您的应用程序中的这些数据
标签: c# asp.net-core oauth identityserver4