【问题标题】:How to add data (an Array) to jwt token which is generated by Identityserver 4如何将数据(数组)添加到由 Identityserver 4 生成的 jwt 令牌
【发布时间】:2020-07-06 20:36:54
【问题描述】:

谁能帮助我了解如何将 array 添加到 identityserver4jwt 令牌,格式如下。

如果数组不包含数据:{ "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


【解决方案1】:

我会按照OAuth 2.0 for Browser-Based Apps 文档中的建议查看this 帖子:

为了避免从 纯粹基于浏览器的应用程序,实现可能希望移动 授权代码交换以及访问和刷新令牌的处理 到后端组件中。

后端组件本质上变成了一个新的授权服务器 对于在浏览器中运行的代码,发出自己的令牌(例如 会话 cookie)。运行代码之间连接的安全性 假定浏览器和此后端组件使用 浏览器级保护机制。

在这种情况下,后端组件可能是机密客户端 发布它自己的客户端密码。

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2020-01-10
    • 2018-04-11
    • 2022-09-24
    • 2020-05-06
    • 2013-06-28
    • 1970-01-01
    • 2019-02-11
    • 2018-08-29
    相关资源
    最近更新 更多