在反应网络应用上实施OAuth2授权端点

时间:2018-06-06 01:01:19

标签: javascript reactjs web-applications oauth-2.0

我已经在服务器上初始请求验证发生之前实现了OAuth2 auth端点,然后向用户显示任何登录表单并且一切都有意义。像这样:

+---------------------+
| Client (third party)|
+---------------------+
  |
  V
+------------+                                      +---------------+
|            | ----- GET /oauth2/authorization ---->|               |
| User-Agent | <--- sign in form (IF VALID REQ) ----| Authorization |
|  (browser) |                                      |    Server     |
|            |                                      |               |
|            | ---------- credentials ------------->|               |
|            | <----- short lived token/cookie  ----|               |
|            |                                      |               |
|            |                                      |               |
|            | ----- POST /oauth2/authorize ------->|               |
|            | <------- grant token (code) ---------|               |
|            |                                      +---------------+
|            |                 
|            | --- redirect_uri?code=ABC
+------------+             |
                           V
                   (captured by client)

上面有2个地方我可以遇到500/503,初始GET请求或以下2个电话中的任何一个。如果是前者,则将500/503直接发送给可以按照自己的意愿处理的客户。如果是后者,我此时已经验证了提供的redirect_uri,并且能够通过用户代理重定向安全地发送错误。

这次授权端点实际上是一个从哑资产服务器提供的React应用程序,所有数据(包括执行请求验证所需的数据都存在于单独的API服务器上)。像这样:

+---------------------+
| Client (third party)|
+---------------------+
  |
  V
+------------+                                      +---------------+
|            | ----- GET /oauth2/authorization ---->|     Dumb      |
| User-Agent | <---------- skeleton html -----------|     Asset     |
|  (browser) |                                      |    Server     |
|            |                                      +---------------+
|            |                                                     
|            |                                      +---------------+
|            | ------- POST /oauth2/validate ------>|               |
|            | <------- status (OK/500/503) --------|               |
|   if OK,   |                                      |               |
|   render   |                                      |               |
|    form    | ---------- credentials ------------->|               |
|            | <----- short lived token/cookie  ----|      API      |
|            |                                      |    Server     |
|            |                                      |               |
|            | ----- POST /oauth2/authorize ------->|               |
|            | <------- grant token (code) ---------|               |
|            |                                      +---------------+
|            |                 
|            | --- redirect_uri?code=ABC
+------------+             |
                           V
                   (captured by client)

在此流程中,浏览器立即启动API调用以验证oauth请求。在幸福的道路上,这很好。请求已经过验证,我会渲染我的表单,并且所有内容都遵循与前一个案例相同的例程。

但是,当POST /oauth2/validate返回500或503时我该怎么办?此时,我尚未验证提供的redirect_uri,因此根据OAuth2 spec,我不应通过用户代理重定向发送server_error / temporarily_unavailable错误。

但是,我是否只是在错误消息中向资源所有者提供错误,就像合法uri_mismatch一样?这感觉很糟糕,因为它比上面的传统版本更具功能性。

其他人在类似于此的客户端/ api架构中实现授权端点吗?你是怎么做到的?

0 个答案:

没有答案