[英]how to handle/manage a lot of permissions in access-token? what's the best approach?
当我尝试访问我的 API 并在 header 中发送令牌时,出现“请求 header 太长”错误。我们如何管理访问令牌中的权限,因为我在访问令牌中有很多权限,大约是大小为 15kb。 我知道不建议将权限存储在访问令牌中,那么在 API 端对用户进行身份验证和授权的最佳方法是什么?
我们正在获取访问令牌中的所有权限,但现在权限越来越大,因为我们有很多模块。 在 asp.net 核心 API 中访问用户权限而不是将其保留在访问令牌中的另一种方法是什么?
{
"roles": [
"Admin"
],
"iss": "Issuer",
"sub": "sub",
"aud": [
"https://example.com/api",
"https://example.com/userinfo"
],
"iat": 1666198659,
"exp": 1666205859,
"azp": "azp",
"scope": "openid profile email offline_access",
"org_id": "company1",
"permissions": [
"permission.1",
"permission.2",
........
"permission.150",
]
}
这可能是一个解决方案: https://auth0.com/developers/lab/fine-grained-authorization
基本上,由于每个用户都有很多权限,所以您不再将它们存储在令牌中; 你可以调用这个为你存储它们的服务。
免责声明:我是构建此解决方案的团队的一员:)
你有两个选择。
您可以尝试使用类似于此处的方法来缩短权限。 还有很多其他类似的问题也有类似的方法。 但是,请注意,您根据继承自的内容限制了权限数量,因此这可能有效也可能无效。 您可以将一个字符串粘贴到 JWT 中,每个字符都用作权限标志。 这带来了更多的缺点,即保持数据是最新的。
您设置远程系统进行授权。 类似于Duende 的 Policy Server 。 这意味着 JWT 中没有授权数据。例如,您可以从您的 api/客户端对您的身份服务器进行简单的 http 调用,并让身份服务器评估用户是否可以做他们想做的事。
由于您拥有大量权限,后者似乎适合您的场景。 它带有开销,但实际上没有其他选择。 https://github.com/Perustaja/PermissionServerDemo是一个示例,它使用内置的 ASP.NET 核心授权评估以及用于 .network 调用的 gRPC。 如果您不需要太多的基础设施,您可以做一些更精简和更简单的事情,基本上做同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.