为了账号安全,请及时绑定邮箱和手机立即绑定

中央认证和授权服务

中央认证和授权服务

呼如林 2023-05-09 09:55:10
我想设计一些“中央认证和授权服务”,我知道已经有一对了。我担心的不是标准。在接下来的几行中,我将尝试解释它。我创建了两个具有自己的身份验证和授权机制的 Django 客户端应用程序。这两个应用程序具有不同的设计,因此具有不同的权限和角色。但是用户是相同的。现在我必须创建第三个应用程序,前两个应用程序必须通过它进行身份验证,这没问题(例如使用 OAuth)。但是第三个应用程序也负责授权,即角色、权限(包括许多对象级权限)由第三个应用程序存储和管理。问题是:我怎样才能实现第三个应用程序,以便它可以支持非特定的、自由式的权限?如何存储这些权限?我应该如何将权限转移到客户端应用程序?我如何查询一些权限?我应该将所有权限存储在第三个应用程序中并在每次用户请求某些资源时查询它们,还是应该将它们保存在本地并在某些时候更新它们?我查看了OpenID Connect、SAML、XACML等。SAML 和 XACML 看起来很有前途,但我仍然感到困惑,上述问题仍未得到解答。我知道这个问题涵盖的范围很广,但是拥有一些入门资源和一些示例项目会有很大帮助。问候。
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

一个可能的解决方案如下:

我怎样才能实现第三个应用程序,以便它可以支持非特定的、自由式的权限? 使用包含用户权限作为范围的 JWT 令牌。

如何存储这些权限?

  • 在第三个应用程序上存储您的用户模型,以及每个用户的权限/角色。

  • 当用户登录时,他们将被重定向到您的第三个应用程序。身份验证成功后,第三个应用程序可以生成 JWT 令牌形式的 access_token,其中包括用户拥有的权限作为范围。

  • 然后,您可以让前端在对客户端应用程序的 API 请求中包含此 access_token。客户端应用程序可以验证 access_token 并检查用户的范围/权限以确定用户是否可以访问某些数据。

我应该如何将权限转移到客户端应用程序? 您的客户端应用程序可以在每个 API 请求中验证/读取 JWT 令牌中包含的范围

我如何查询一些权限? 不确定这意味着什么,我可以解释 2 个不同的东西:

  1. 以Github为例,一个Github App可以指定自己需要read访问和email访问(但不是write访问权限),用户可以进行身份验证,只能批准reademail访问。在这种情况下,授权服务器 (Github) 将生成一个仅包含范围的 JWT reademail即使用户具有其他可用权限也是如此。

  2. 如果您谈论的是客户端应用程序想要知道用户是否具有特定权限,那么它可以只查看 JWT 中包含的范围。您可能需要为客户端应用程序中的每个端点定义所需的范围。

我应该将所有权限存储在第三个应用程序中并在每次用户请求某些资源时查询它们,还是应该将它们保存在本地并在某些时候更新它们?

每个用户的权限可以存储在第三个应用程序中,客户端应用程序只信任 JWT 中包含的范围。由于 access_token 应该是短暂的(例如它会在 1 小时后过期),因此可以通过更新 access_token 来处理用户权限级别的更改。


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信