用户已经登录到 Oauth 提供程序时的 OAuth 流程

OAuth flow when user is already logged in to the Oauth Provider

因此,使用授权授予类型的基本 OAuth2 流程通常如下所示(假设 OAuth Client=Quora,OAuth Server=Google,例如,目的):

  1. 用户转到客户端,被重定向到服务器登录页面进行身份验证。
  2. 用户登录到服务器,服务器 returns 一个 authorization_code 到客户端。
  3. 客户端然后使用 client_id、client_secret 和 authorization_code 调用服务器以获取令牌。
  4. 服务器验证并用令牌回复。
  5. 客户端现在可以使用令牌从服务器访问 api/resources。

现在,如果用户已经登录说,首先是服务器,然后尝试访问客户端,

  1. 客户端如何知道用户已经登录到服务器,(因为客户端无法从服务器域访问 cookie)?
  2. 客户端将从哪里获取授权码以获取访问令牌?

好问题。这是发生了什么:

  1. 客户端被重定向到服务器页面以进行授权。
  2. 服务器 (Google) 在浏览器中只为他们的域设置了 cookie(从上次开始),并且可以看到用户的信息。
  3. 服务器 (Google) 生成一个新的授权代码,并使用该代码重定向回客户端 webapp。
  4. 然后,客户端应用程序使用 client_id、client_secret 和新的授权代码令牌对服务器进行 API 调用,并获取新的访问令牌。
  5. 然后客户端应用程序创建一个 cookie(或使用本地存储)来存储这个新的访问令牌并保持用户登录。