【问题标题】:Mixing authorization code and implicit grant type in OAuth2在 OAuth2 中混合授权代码和隐式授权类型
【发布时间】:2018-10-02 10:24:21
【问题描述】:

我对以下涉及 OAuth2 的流程有一些疑问:

webapp1.xyz.com 是一个注册客户端,授权码授权类型,当前流程如下:

  1. 用户登录并使用授权码重定向到 webapp1.xyz.com
  2. webapp1.xyz.com 交换访问令牌的授权码并将其存储到会话中
  3. webapp1.xyz.com 服务器端需要通过传递访问令牌来调用 webapp2.xyz.com api
  4. webapp1.xyz.com 有 SPA,其中 ajax 调用 webapp1.xyz.com api 端点(在请求中传递会话 cookie)
  5. 用户退出,会话被破坏

有人建议使用(隐式授予)访问令牌而不是会话 cookie 进行 ajax 调用。这甚至可能混合授权代码和隐式授权类型吗?也许我在混合一些东西,我看不出为什么要为 ajax 部分使用隐式授权类型。

【问题讨论】:

标签: javascript ajax oauth oauth-2.0 single-page-application


【解决方案1】:

这甚至可能混合授权代码和隐式授权吗 输入?

问题更多的是您在谈论两个应用程序的一个令牌。或者更确切地说,webapp1 既是 OAuth 客户端(调用 Web API - webapi2 的网站)又是 OAuth 资源(SPA 可以使用隐式授权调用的 Web API)。

所以:SPA javascript > webapp1.xyz.com 应用程序 > webapp2.xyz.com 应用程序。

在 Oauth2.0 术语中,您的 SPA 客户端应用程序将是客户端,而 webapp1 和 webapp2 将是资源。理想情况下,客户端将使用隐式授权来获取访问令牌,因为这是公共 JavaScript 客户端的优化流程。

如果可能,也许看看混合流 - OAuth2 和 OpenID Connect - 而不是授权代码流。

使用混合流,webapp1 将像当前一样获得一个令牌,但它也会获得一个 ID 令牌,它可以将其传递回 SPA。

ID 令牌旨在供客户端用于身份验证 - 此 ID 令牌可以执行会话 cookie 所做的相同工作(即 SPA 和 SPA 后端之间的身份验证)。并且访问令牌将安全地存储在远离 SPA 的 webapp1 服务器上。

【讨论】:

  • 这是一个场景,其中“webapp1 既是 OAuth 客户端(调用 Web API - webapi2 的网站)又是 OAuth 资源(SPA 可以使用隐式授权调用的 Web API)”。我不知道通过授权流程收到的 ID 令牌可以传递给 SPA,我的印象是,ID 令牌不会暴露给用户代理。如果将 ID 令牌传递给 SPA 并且 SPA 可以使用令牌并向 webapp1 发出请求,那么 webapp1 需要做的只是验证令牌吗?谢谢!
  • 没错。您可以拥有使用服务器端将令牌传递回用户代理的 SPA。 Microsoft Azure 门户就是一个例子。如果 spa 和 webapp1 之间不需要委托访问,则 id 令牌将有助于身份验证。
  • 将授权代码流期间收到的 id 令牌传递给 SPA,这是正确的做法吗?谢谢!
  • 当您的重定向 URL 获得 Auth 代码时,它将获得一个 id_token。据我所知,当它返回水疗资源时,没有理由不能提供它。要么为水疗中心注册一个客户端,要么处理两个令牌请求。 Spa 隐式授权和 webapp1 Auth 代码授权。
猜你喜欢
  • 2021-04-24
  • 2018-11-04
  • 2018-05-26
  • 2019-12-31
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2018-11-21
相关资源
最近更新 更多