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

Javascript 在OAuth2中混合使用授权代码和隐式授权类型,javascript,ajax,oauth,oauth-2.0,single-page-application,Javascript,Ajax,Oauth,Oauth 2.0,Single Page Application,我对以下涉及OAuth2的流程有一些疑问: webapp1.xyz.com是一个具有授权代码授权类型的注册客户端,以下是当前流程: 用户登录并使用授权代码重定向到webapp1.xyz.com webapp1.xyz.com交换访问令牌的授权码并将其存储到会话 webapp1.xyz.com服务器端需要通过传递访问令牌来调用webapp2.xyz.com api webapp1.xyz.com有SPA,ajax在其中调用webapp1.xyz.com api端点(在请求中传递会话cookie)

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

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

  • 用户登录并使用授权代码重定向到webapp1.xyz.com
  • webapp1.xyz.com交换访问令牌的授权码并将其存储到会话
  • webapp1.xyz.com服务器端需要通过传递访问令牌来调用webapp2.xyz.com api
  • webapp1.xyz.com有SPA,ajax在其中调用webapp1.xyz.com api端点(在请求中传递会话cookie)
  • 用户已注销,会话已销毁
  • 有人建议使用(隐式授权)访问令牌而不是会话cookie进行ajax调用。授权代码和隐式授权类型是否可能混合使用?也许我混合了一些东西,我看不出为什么要对ajax部分使用隐式授权类型

    甚至可能混合使用授权代码和隐式授权吗 类型

    问题更多的是,您讨论的是两个应用程序的一个令牌。或者更确切地说,webapp1既是OAuth客户机(调用WebAPI-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的web站点-webapi2)又是OAuth资源(SPA可以使用隐式授权调用的web API)”的场景。我不知道通过授权流收到的ID令牌可以传递给SPA,我的印象是,ID令牌不会暴露给用户代理。如果ID令牌被传递给SPA,SPA可以使用该令牌并向webapp1发出请求,那么webapp1需要做的就是验证该令牌?谢谢确切地您可以拥有使用服务器端将令牌传递回用户代理的SPA。微软Azure门户就是一个例子。如果spa和webapp1之间不需要委托访问,则id令牌将有助于身份验证。将在授权代码流期间收到的id令牌传递给spa,这是正确的做法吗?谢谢在重定向URL获得身份验证代码时,它将获得一个id_标记。在我看来,当它归还温泉资源时,没有理由不能提供这些。或者为spa注册一个客户端,并处理两个令牌请求。Spa隐式授权和webapp1身份验证代码授权。