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
.
这是一个更好的解决方案吗?