OIDC / OAuth - 检索 SID Cookie

OIDC / OAuth - Retrieve SID Cookie

正在研究OIDC,有一个理解上的问题...


上下文:

我想使用 Google(使用 OIDC 协议)在 Whosebug 上注册。
所以EndUser还没有注册

  1. EndUser 点击登录 google
  2. Whosebug 重定向到 https://accounts.google.com/o/oauth2/auth (accounts.google.com)
  3. EndUser 同意并使用凭证登录
  4. Google 检查凭证并通过存储 SID cookie[=54= 注册 endUser ] 通过响应头 set-cookie: SID=...;Domain=.google.com;Path=/;Expires=...;Priority=HIGH
  5. Google 重定向到 Whosebug
  6. ~~ Whosebug 可以访问域 google.com 上的 SID cookie 存储 ~~
  7. Whosebug 知道用户已通过身份验证

问题

~~ 为什么 Whosebug 在重定向时可以访问域 google.com 上的 SID cookie? ~~

编辑

抱歉,Whosebug 没有访问 SID cookie 的权限! 我现在的问题是: Whosebug 如何知道用户已通过身份验证?因为会话 cookie 是由 google...

设置的

我无法在 Chrome 版本 94.0.4606.81 中重现该内容。

我保留了整个注册过程的网络日志,只看到 Google cookie 转到 Google 和 Whosebug cookie 转到 Whosebug。

screenshot of Google Consent request

screenshot of Stack Overflow request


TL;DR -- Google 给你一个代码,你给 Whosebug 并且 Whosebug 用 Google.

验证代码

OAuth2.0/OIDC 规范定义了几种方式,Google 和 Whosebug 可以就用户身份验证和授权安全地进行通信。 当我学习它时,我必须克服的主要障碍是我期望它会比实际更简单。

Takahiko Kawasaki (@takahiko-kawasaki) 发布了一个方便的参考 “所有 OAuth 2.0 流程的图表和电影” https://darutk.medium.com/diagrams-and-movies-of-all-the-oauth-2-0-flows-194f3c3ade85“流程”是用户、身份验证服务器(Google,在本例中)和“客户端”(在本例中为 Whosebug)采取的一系列步骤。

Whosebug 正在使用“验证码”流程,这是文章中的第一个流程。

下面是对所发生情况的稍微简化的描述。

1) 重定向到 Google

当您在 Whosebug 上单击“用 google 签名 in/up”按钮时,它会将您的浏览器重定向到 accounts.google.com,并在查询字符串上使用一些参数:

  • response_type: 这告诉 Google 使用哪个“流”。在这种情况下,它会给 Whosebug 一个代码。
  • client_id: 这告诉 Google 授权请求是针对 Whosebug 的。 Whosebug 之前在他们的 Google 开发者帐户中进行了设置。
  • scope: 这告诉 Google Whosebug 想要从用户的 Google 帐户访问什么(在这种情况下,只是电子邮件和个人资料信息)
  • state: 这是 Google 将发回 Whosebug 的字符串。看起来里面有一堆东西,包括如何重新连接 Whosebug 会话,但我可能弄错了。
  • redirect_uri: 这是 URL,Google 将在完成登录过程后将用户送回。

2) 重定向回 Whosebug

当您在 Google 端完成后,Google 会将您重定向回 Whosebug URL,并在查询字符串中添加一些新内容。

  • state: 这与 Whosebug 发送到 Google 的数据相同。它现在由 Google 发回,因此当 Whosebug 将您发送到 Google 登录时,它可以使用它从中断的地方继续。
  • code: 这是一个字符串,表示用户已通过身份验证。 Whosebug 可以使用此代码一次来验证您确实进行了身份验证并从 Google.
  • 获得了一两个令牌
  • scope: 这些是 Google 实际允许的范围。它可能与 Whosebug 在上一步中请求的不同。
  • authuser:我不知道这是什么。我不认为这是 OAuth 标准
  • 提示:我不知道这是什么。我不认为这是 OAuth 标准

3) Whosebug 使用 Google

检查

在这两个重定向之后,Whosebug 有一个授权码。 Whosebug 将代码连同 Google 之前分配给 Whosebug 的秘密字符串一起发送到 Google。

我在我的浏览器网络跟踪中看不到这种情况,因为它在 Whosebug 和 Google 之间,但我认为 Whosebug 接受身份令牌和授权令牌,两者都是 JWT 格式。

这些令牌已签名,因此 Whosebug(或任何人,真的)可以验证它们实际上是由 Google 发送的并且在传输过程中未被修改。这些令牌的有效负载包含有关用户的信息,例如姓名、电子邮件地址等。

注意:Google 授权令牌可能是一个随机的唯一字符串(“不透明令牌”),但我在这里假设它是一个 JWT。如果它是不透明的,则有一个额外的步骤,Whosebug 使用它从 Google.

中获取用户信息