背景
我正在建立一个与休息api通信的水疗和移动应用程序。我想运行一个单独的auth服务器来管理用户(资源所有者),并认为oAuth2 4.3资源所有者密码凭据授权对我的应用程序有意义。
As described in the specification,用户(资源所有者)应该直接与我的其他api(客户端)通信,然后我的其余api(客户端)应该与auth服务器通信。
+----------+
| Resource |
| Owner |
| |
+----------+
v
| Resource Owner
(A) Password Credentials
|
v
+---------+ +---------------+
| |>--(B)---- Resource Owner ------->| |
| | Password Credentials | Authorization |
| Client | | Server |
| |<--(C)---- Access Token ---------<| |
| | (w/ Optional Refresh Token) | |
+---------+ +---------------+
Figure 5: Resource Owner Password Credentials Flow
但是,我想改变这种流程。我希望用户(资源所有者)直接与auth服务器通信,接收令牌,然后使用这些令牌与我的其他api(客户端)进行通信:
+----------+
| Resource |
| Owner |
| |
+----------+
v
Resource Owner |
Password Credentials (A)
|
v
+-----------+
------------(G)-------- JSON -------------->| SPA / APP |
| -----(D)---- Access Token ----------<| |
| | +-----------+
| | v ^
| | Resource Owner | |
| | Password Credentials (B) (C) Access token
| | | |
^ V v ^
+---------+ +---------------+
| |>--(E)--- Token Introspection --->| |
| | | Authorization |
| REST | | Server |
| API |<--(F)----- Token Metadata ------<| |
| | | |
+---------+ +---------------+
Figure 5: Resource Owner Password Credentials Flow (modified)
FYI步骤(E)和(F)如RFC 7662中所定义。
问题
我想知道你对这个设计的看法。我知道这是RFC 6749的混蛋,但我认为它更适合我的需求。
我认为我的流程的优点是:
我认为缺点是:
答案 0 :(得分:1)
OAuth 2.0由两个协议部分组成:如何从授权服务器“获取”访问令牌以及如何对资源服务器所服务的受保护资源“使用”访问令牌。
您从规范中粘贴的图片不包含“使用访问令牌”的一部分,因为它在所有授权中都是通用的;它只关注“获取访问令牌”的一小部分。
您的图表将两者放在一张图片中,但您将混合角色:REST API不是客户端。客户是您的SPA。 API是资源服务器。然后,您的图片代表(完整)标准OAuth 2.0资源所有者密码凭据流+附加令牌内省部分。