gpt4 book ai didi

jwt - JWT中的复杂声明

转载 作者:行者123 更新时间:2023-12-04 17:32:19 25 4
gpt4 key购买 nike

JWT RFC似乎不存在包含复杂数组的任何问题,例如:

{
"email": "test@test.com",
"businesses": [
{
"businessId": "1",
"businessName": "One",
"roles": [
"admin",
"accountant"
]
},
{
"businessId": "2",
"businessName": "Two",
"roles": [
"support"
]
}
]
}

这似乎是满足我们需求的理想方案,因为作为 token 的一部分,我们希望获得用户可以访问的业务列表以及他对每个业务起什么作用(这是其身份的一部分)。 API处的授权策略稍后将理解这些组并应用所需的授权逻辑。

我已经看到,使用IdentityServer4可以将声明添加到 ProfileDataRequestContextIEnumerable<Claim> IssuedClaims属性中。

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

PS:我见过 this questionthis other,其中Identity Server的一位作者谈论类似的东西是反模式。不确定反模式在权利要求中是否具有复杂的权利要求的结构或“授权实现细节”。

任何建议,这将是巨大的!

更新:

经过考虑后,我同意不希望拥有复杂的声明层次结构,并且可以通过为每个businessId前缀角色的肮脏解决方案来解决此问题。像这样的东西:
{
"email": "test@test.com",
"roles": [
"1_admin",
"1_accountant",
"2_support"
],
"businesses": [
"1_One",
"2_Two"
]
}

这样,我就可以保持简单的结构,然后在客户端或API上,我可以阅读声明并发现 1是名称为 One的公司的ID,并且具有 adminaccount的角色。

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

最佳答案

声明是关于身份信息的,而不是复杂的权限“对象”。专用的权限服务会给您带来更好的 yield ,该服务可以根据用户的身份以您想要的任何格式返回您的权限。

我也希望在使用 token 时,您的许可数据不会发生变化,否则您最终将获得陈旧的数据。

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

关于jwt - JWT中的复杂声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39380623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com