在OAuth2中混合授权代码和隐式授权类型

时间:2018-04-22 06:03:09

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

我对涉及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. 用户已注销,会话被销毁
  6. 有人建议使用(隐式授权)访问令牌而不是会话cookie来进行ajax调用。甚至可能混合授权代码和隐式授权类型?也许我正在混合一些东西,我看不出为什么在ajax部分使用隐式授权类型的原因。

1 个答案:

答案 0 :(得分:2)

  

甚至可能混合授权代码和隐式授权   类型?

问题更多的是你在谈论两个应用程序的一个令牌。或者更确切地说,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服务器上。