JWT 中的复杂声明

2023-11-21

The JWT RFC包含复杂数组似乎没有任何问题,例如:

{
    "email": "[email protected]",
    "businesses": [
        {
            "businessId": "1",
            "businessName": "One",
            "roles": [
                  "admin",
                  "accountant"
            ]
        },
        {
            "businessId": "2",
            "businessName": "Two",
            "roles": [
                  "support"
            ]
        }
     ]
}

这似乎是满足我们需求的理想场景,因为作为令牌的一部分,我们希望拥有用户有权访问的企业列表以及他对每个企业具有哪些角色(这是其身份的一部分)。 API 上的授权策略稍后将了解这些组并应用所需的授权逻辑。

我已经看到,使用 IdentityServer4,声明被添加到ProfileDataRequestContext's IEnumerable<Claim> IssuedClaims财产。

对于这种复杂的索赔结构,是否有任何推荐的替代方案?如果没有,是否有任何方法可以使用 IdentityServer4 构建该结构(也许是某种扩展?),或者唯一的方法是手动序列化 JSON,因为声明似乎只接受字符串?

PS:我见过这个问题 and 这个其他Identity Server 的一位作者谈到了类似的反模式。不确定反模式是否会具有复杂的声明结构或声明中的“授权实现细节”。

任何关于这方面的建议都会很棒!

UPDATE:

经过一番思考后,我同意拥有复杂的声明层次结构是不可取的,我可以通过为每个businessId添加角色前缀的肮脏解决方案来解决这个问题。像这样的东西:

{
    "email": "[email protected]",
    "roles": [
        "1_admin",
        "1_accountant",
        "2_support"
     ],
     "businesses": [
        "1_One",
        "2_Two" 
     ]
}

这样我就可以保持简单的结构,然后在客户端或 API 上我可以阅读声明并发现1是具有名称的企业的 IDOne它有以下角色admin and account.

这是一个更好的解决方案吗?


声明是关于身份信息的,而不是复杂的权限“对象”。如果使用专门的权限服务,您的情况会好得多,该服务可以根据用户的身份以您想要的任何格式返回您的权限。

我还希望您的权限数据在使用令牌时不会更改,否则您最终会得到陈旧的数据。

也就是说 - 声明始终是 .NET 中的字符串 - 但您可以通过设置将 JSON 对象序列化到其中ClaimValueType to IdentityServerConstants.ClaimValueTypes.Json.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JWT 中的复杂声明 的相关文章

随机推荐

  • Postgres 9.5 ON 冲突请选择

    在 Postgres 9 5 中执行 UPSERT 时 是否可以在 INSERT 成功时返回 null 并在冲突时返回某些内容 我想要这样的事情 insert into user timestamp user id member id va
  • 使用 gson dateformat 序列化和反序列化 unix-timestamps

    我正在使用 Gson 来序列化 反序列化我的 pojo 目前正在寻找一种干净的方法来告诉 Gson 将日期属性解析 输出为 unix 时间戳 这是我的尝试 Gson gson new GsonBuilder setDateFormat U
  • babel 7 不允许在装饰器和类之间使用 export 关键字。请改用“export @dec class”

    我正在使用 React js 和最新的 babel 7 当我使用 mobx 装饰器时出现错误 解析错误 不允许在装饰器和类之间使用导出关键字 请用export dec class反而 my code import React Compone
  • 向从架构生成的 JAXB 类添加额外的方法

    这是我的 XSD 文件的一小段摘录
  • Spark 结构化流的内存问题

    我在 Spark 2 2 0 中运行具有聚合和分区的结构化流时遇到内存问题 session readStream schema inputSchema option OPTION KEY DELIMITER OPTION VALUE DEL
  • 创建一个“机器人”来填写表单中的一些页面

    我想实现一个可以自动填写表格的 机器人 例如 当您可以在页面上填充数据时 是否有解决方案 form1 html并提交 等待下一页并提交数据form2 html 等等 最后 它还应该 单击 按钮来获取表单创建的文件 我希望这个 机器人 会使用
  • 在 Matlab 中将 unicode 字符串写入文件

    我有一个包含乌尔都语字符的字符串 例如 巴扎 这是一个 1x4 数组 我想将其保存到一个文件中 以便外部查看 虽然该字符串不会显示在主命令行窗口中 但变量 str 确实保存了它 当我使用 fprintf fid str 保存该文件并在记事本
  • MediaPlayer 停止播放声音 - Android

    这是一个简单的钢琴应用程序 它可以工作 但有一个问题 在大约 20 次点击后 有时恰好是 28 次点击 即使我点击按钮 它也不会发出任何声音 该应用程序不会崩溃 也不会警告我任何事情 这只是一无所有 没有声音 你有什么主意吗 package
  • Boto3 仅获取特定区域的 S3 存储桶

    以下代码遗憾地列出了所有区域的所有存储桶 而不仅仅是指定的 eu west 1 我怎样才能改变这一点 import boto3 s3 boto3 client s3 region name eu west 1 for bucket in s
  • 自己颁发 JWT 令牌与使用 IdentityServer4(OIDC) 进行 Web API

    https identityserver4 readthedocs io en release intro support html 我目前在我的 Web api 中自己发行令牌JwtSecurityToken我使用标准 ASP NET C
  • 如何从 DataView 的列中获取值?

    我有一个数据视图定义为 DataView dvPricing historicalPricing GetAuctionData DefaultView 这是我尝试过的 但它返回名称 而不是列中的值 dvPricing ToTable Col
  • SQLAlchemy 可以自动从数据库模式创建关系吗?

    从带有外键的现有 SQLite 数据库开始 SQLAlchemy 可以自动构建关系 SQLAlchemy 类是通过自动创建的 table args autoload True 目标是轻松访问相关表中的数据 而无需手动一一添加所有关系 即不使
  • 为什么此代码会导致 Excel 无法正常关闭?

    为什么这行代码会导致Excel无法退出 Excel Range range Excel Range ws Cells 1 1 如果是因为转换的原因 那么这段代码不会导致同样的问题吗 Excel Worksheet ws Excel Work
  • 使用 LINQ 的多个或单个存储库

    我一直在阅读 Professional ASP NET MVC 1 0 书中的第 11 章 可测试设计模式 在本章的示例中 数据访问被分为多个存储库 IOrderRepository IProductRepository 等 这一切都有意义
  • 谷歌地理编码停止为乌克兰克里米亚工作

    我发现了一个非常奇怪的问题 地理编码 API 突然停止支持克里米亚坐标 示例 辛菲罗波尔市 但它适用于乌克兰和俄罗斯的任何其他地方 示例 乌克兰基辅 最近API运行正常 请教一下 是不是因为乌克兰的政治事件而对谷歌进行了限制 该服务是否应该
  • 如何在 Vue Router v4 中为自定义元字段声明 TypeScript 类型接口?

    With Vue 路由器版本 4 目前是在 vue router next repo 的 beta 11 中 有一个文档页 about 如何使用 TypeScript 定义元字段自定义类型接口 declare module vue rout
  • 如何比较 C 中的多字节字符

    我尝试解析文本并在其中找到一些字符 我使用下面的代码 它适用于普通字符 例如abcdef但它不适用于 GCC 给出编译警告 我应该做什么来工作 Code include
  • HTTP 与 Websockets 的开销对比

    我正在两端使用 node js 构建一个文件同步程序 与 Dropbox 不同 我需要有潜在的数千个客户端同时请求数据 这是我当前的系统 服务器通过 websocket 向客户端推送通知 文件已更新 客户端对下载进行排队并在空闲时发出 HT
  • 回形针和 xhr.sendAsBinary

    我使用回形针将文件添加到我的模型中 我想使用firefox 3 6的新功能 xhr sendAsBinary 通过 ajax 请求发送文件 以下是我如何构建我的请求 var xhr new XMLHttpRequest xhr open P
  • JWT 中的复杂声明

    The JWT RFC包含复杂数组似乎没有任何问题 例如 email email protected businesses businessId 1 businessName One roles admin accountant busin