Lak*_* Lu 3 authentication permissions authorization oauth openid-connect
目前,我们已经有了一个应用程序,它\xe2\x80\x99是一个前后端分离的应用程序,前端是一个Web应用程序(SPA),后端是一个Web API。
\n\n对于应用程序来说,我们已经有了使用注册、用户登录、用户角色、角色权限、用户检查和权限检查。
\n\n现在,我们正在集成外部身份服务(open id和Oatuh2),但我误解了外部身份服务的身份验证和授权
\n\n问题1:是的,我可以使用外部身份服务登录并获取访问令牌,但之后,我仍然需要在我的应用程序中维护用户,因为对于业务来说,我需要知道谁创建了订单,谁操作了它etc\xe2\x80\xa6 那么,用户系统我在应用程序中所做的事情,我仍然需要做,它是否正确我所做的事情?
\n\n问题2:对于授权,我仍然需要在应用程序中为自己维护用户角色、角色权限和权限检查,如果是这样,身份服务(OAuth2)的授权有什么用?我的应用程序中的 OAuth2 授权和权限模块有什么区别?
\n首先,OAuth 2.0 没有定义如何处理权限。它定义了一种获取访问令牌的方法。访问令牌是您的 API 作为访问授权接受的秘密(例如:- 将它们与基本身份验证标头进行比较。现在您会收到一个令牌)。
如何进行token验证?您有两个主要选择。您可以针对令牌颁发者(身份服务)进行令牌内省(RFC7662 )。响应将包含有效负载,其中可能包含经过身份验证的最终用户和令牌到期详细信息。
或者,如果访问令牌采用 JWT 格式 ( RFC7519 ),那么您的 API 可以查找以 JWT 发送的特定声明(您将执行 JWT 验证,其中包括 JWT 签名验证)。声明应包括最终用户以及到期详细信息。
无论哪种方式,您的权限逻辑都可以在提取所需信息后调用。
关于身份验证,这是使用 OpenID Connect 和 ID Token 构建的。身份验证将在客户端进行(SPA 如您的情况)。这与 API 调用无关。
关于权限、用户和角色映射。如果您使用内置用户数据存储,则需要在外部身份服务和内部存储之间进行用户映射。否则,无法将您通过令牌收到的用户数据(如答案第一部分所述)与内置数据相关联。这是独立于 OAuth 2.0 和 OpenID Connect 的东西。
例如,如果在内部存储中找不到该用户,那么您可以假设该用户属于受限用户角色。此外,您可以在第一次收到此类数据时(验证令牌时)将该用户添加到您的内部系统。稍后,可以有一个过程为登录的用户分配权限。不过,确切的实施细节取决于您的场景。
| 归档时间: | 
 | 
| 查看次数: | 1476 次 | 
| 最近记录: |