背景
我正在构建一个水疗中心和移动应用程序,它将与一个休息 api 进行通信。我想运行一个单独的身份验证服务器来管理用户(资源所有者),并认为 oAuth2 4.3 资源所有者密码凭据授予对我的应用程序有意义。
如规范中所述,用户(资源所有者)应该直接与我的 rest api(客户端)通信,然后我的 rest api(客户端)应该与身份验证服务器通信。
+----------+
| 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
但是,我想改变这个流程。我希望用户(资源所有者)直接与身份验证服务器通信,接收令牌,然后使用这些令牌与我的 rest 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)
仅供参考,步骤 (E) 和 (F) 如RFC 7662中所定义。
问题
我想知道你对这个设计有什么想法。我知道这是 RFC 6749 的混蛋,但我认为它更适合我的需求。
- 是否有 RFC 6749 中定义的更好的流程可以满足我的需求?
- 除了 RFC 6749 之外,还有其他规范可以更好地满足我的需求吗?
我认为我的流程的优点是:
- 不需要我在水疗中心或移动应用程序中存储密码
- 允许我的用户直接与身份验证服务器通信以进行登录/注销等。将关注点与我的其余 api(s) 完全分离
- 允许我更轻松地添加其他 api(微服务),而无需处理用户身份验证。
我认为缺点是:
- 要求我的身份验证服务器面向公众
- 需要更多步骤
- 完全不符合规范