authentication - 应用权限和oauth2授权有什么区别?

标签 authentication oauth permissions authorization openid-connect

目前,我们已经有了一个应用程序,它是一个前后端分离的应用程序,前端是一个Web应用程序(SPA),后端是一个Web API。

对于应用,我们已经有了使用注册、用户登录、用户角色、角色权限、用户检查和权限检查。

现在,我们正在集成一个外部身份服务(open id和Oatuh2),但是我对外部身份服务的认证和授权有误解

问题 1: 是的,我可以使用外部身份服务登录并获取访问 token ,但在那之后,我仍然需要在我的应用程序中维护用户,因为对于业务来说,我需要知道谁创建了订单,谁操作了它等等……那么,用户系统我在我的应用程序中所做的,我仍然需要做的,它是否正确我所做的?

问题2:对于授权,我在应用中还需要为自己维护用户角色、角色权限和权限校验,如果需要,身份服务授权(OAuth2)有什么用?我的应用程序中的 OAuth2 授权和权限模块有什么区别?

最佳答案

首先,OAuth 2.0 没有定义如何处理权限。它定义了一种获取访问 token 的方法。访问 token 是您的 API 接受作为访问授权的 secret (例如:- 将它们与基本身份验证 header 进行比较。现在您收到的是 token )。

如何进行 token 验证?您有两个主要选择。您可以对 token 颁发者(身份服务)进行 token 自省(introspection)(RFC7662)。响应将包含有效负载,其中可能包含经过身份验证的最终用户和 token 到期详细信息。

或者,如果访问 token 采用 JWT 格式 (RFC7519),那么您的 API 可以查找 JWT 中发送的特定声明(您将进行 JWT 验证,其中包括 JWT 签名验证)。声明应包括最终用户以及过期详细信息。

无论哪种方式,都可以在提取所需信息后调用您的权限逻辑。

关于身份验证,这是使用 OpenID Connect 和 ID Token 构建的。身份验证将在客户端进行(在您的情况下为 SPA)。这独立于 API 调用。

关于权限、用户和角色映射。如果您使用的是内置用户数据存储,则需要在外部身份服务和内部存储之间进行用户映射。否则,无法将您通过 token 接收的用户数据(如答案第一部分所述)与内置数据相关联。这是独立于 OAuth 2.0 和 OpenID Connect 的东西。

例如,如果在内部存储中找不到用户,那么您可以假定该用户属于受限用户角色。此外,您可以在第一次收到此类数据时(验证 token 时)将该用户添加到您的内部系统。稍后,可以有一个过程为登机的用户分配权限。不过,具体的实现细节取决于您的场景。

关于authentication - 应用权限和oauth2授权有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369182/

相关文章:

web-services - 如何改进 Perl Dancer 应用程序中的身份验证

javascript - 适用于 Wrike API v3 的 Ajax/ASP.net Oauth2

Java : Google AppEngine : OAuth : Google Drive API to access user's Google Drive contents created by Web Application

ios - 如何使用 ios sdk 在没有权限对话框的情况下登录 facebook?

php - 如何将 JWT 添加到授权 header ?

c# - 基于用户权限的 MEF 组件

sql-server-2005 - SQL Server : How to permission schemas?

python - OpenSSH 公钥不适用于 Cygwin

ios - 您能否删除 iOS 移动设备上安装程序用户代理(不同于 Safari)使用的 cookie?

ios - 寻找一种快速生成 OAuth 1 签名的方法