我想设计一些“中央身份验证和授权服务”,并且我知道已经有一个couple。我担心的不是标准。在以下几行中,我将尝试对其进行解释。
我创建了两个具有自己的身份验证和授权机制的Django客户端应用程序。这两个应用程序具有不同的设计,因此具有不同的权限和角色。但是用户是相同的。
现在,我必须创建第三个应用程序,前两个应用程序必须通过该应用程序进行身份验证,并且可以(例如使用OAuth)。但是第三个应用程序还负责授权,即,角色,权限(包括许多对象级权限)由第三个应用程序存储和管理。
问题是:
如何实现第三个应用程序,使其能够支持非特定的自由样式权限?
如何存储这些权限?
我应该如何将权限转移到客户端应用程序?
如何查询一些权限?
我应该将所有权限存储在第三个应用程序中,并在每次用户请求某些资源时查询它们,还是应该在本地保存它们并在某些时候更新它们?
我看过OpenID Connect,SAML,XACML等。 SAML和XACML看起来很有希望,但是我仍然感到困惑,并且上述问题仍然没有答案。
我知道这个问题涵盖了广泛的领域,但是拥有一些启动资源和一些示例项目将大有帮助。
致谢。
答案 0 :(得分:1)
可能的解决方案如下:
如何实现第三个应用程序,使其能够支持非特定的自由样式权限? 使用包含用户权限作为范围的JWT令牌。
如何存储这些权限?
如何将权限转移到客户端应用程序? 您的客户端应用程序可以在每个API请求上验证/读取JWT令牌中包含的范围
如何查询某些权限? 不知道这意味着什么,我可以解释2种不同的东西:
read
访问权限和email
访问权限(但不需要write
访问权限),并且用户可以进行身份验证并仅批准read
和email
访问。在这种情况下,即使用户具有其他可用权限,授权服务器(Github)也会生成仅包含read
和email
范围的JWT。我应将所有权限存储在第三个应用程序中,并在每次用户请求某些资源时查询它们,还是应该将其保存在本地并在某些时候进行更新?
每个用户的权限可以存储在第三个应用程序中,而客户端应用程序仅信任JWT中包含的范围。由于access_token应该是短暂的(例如,它会在1小时后过期),因此可以通过更新access_token来处理用户权限级别的更改。