1 回答
TA贡献1966条经验 获得超4个赞
一个可能的解决方案如下:
我怎样才能实现第三个应用程序,以便它可以支持非特定的、自由式的权限? 使用包含用户权限作为范围的 JWT 令牌。
如何存储这些权限?
在第三个应用程序上存储您的用户模型,以及每个用户的权限/角色。
当用户登录时,他们将被重定向到您的第三个应用程序。身份验证成功后,第三个应用程序可以生成 JWT 令牌形式的 access_token,其中包括用户拥有的权限作为范围。
然后,您可以让前端在对客户端应用程序的 API 请求中包含此 access_token。客户端应用程序可以验证 access_token 并检查用户的范围/权限以确定用户是否可以访问某些数据。
我应该如何将权限转移到客户端应用程序? 您的客户端应用程序可以在每个 API 请求中验证/读取 JWT 令牌中包含的范围
我如何查询一些权限? 不确定这意味着什么,我可以解释 2 个不同的东西:
以Github为例,一个Github App可以指定自己需要
read
访问和email
访问(但不是write
访问权限),用户可以进行身份验证,只能批准read
和email
访问。在这种情况下,授权服务器 (Github) 将生成一个仅包含范围的 JWTread
,email
即使用户具有其他可用权限也是如此。如果您谈论的是客户端应用程序想要知道用户是否具有特定权限,那么它可以只查看 JWT 中包含的范围。您可能需要为客户端应用程序中的每个端点定义所需的范围。
我应该将所有权限存储在第三个应用程序中并在每次用户请求某些资源时查询它们,还是应该将它们保存在本地并在某些时候更新它们?
每个用户的权限可以存储在第三个应用程序中,客户端应用程序只信任 JWT 中包含的范围。由于 access_token 应该是短暂的(例如它会在 1 小时后过期),因此可以通过更新 access_token 来处理用户权限级别的更改。
添加回答
举报