如何 "sign in with Google" (id_token) *和* 接收特定范围的 code/access_token(对于后端)
How to "sign in with Google" (id_token) *and* receive a code/access_token for specific scope (for the backend)
我正在构建一个应用程序,用户应该可以在其中 使用 Google 登录,但之后,后端服务器需要访问来自用户的帐户(analytics.readonly
范围)。
如果我理解正确的话,这可以通过“OAuth Hybrid Flow”来完成:一个 id_token
和一个 authorization_code
在前面的通道上 returned,但是敏感的 access_token
和 refresh_token
只能在后台频道上检索。
然而,Google 似乎没有提供此功能。
我想象我的前端可以在 Google OAuth 流之后接收 id_token
和 code
作为 URL 参数。 React 前端然后 POST
id_token
和 code
到我的 Flask 后端。
后端然后 1) 检查 id_token
,2) 将 code
交换为 refresh/access token
和 return 一个经过身份验证的会话 cookie 到前端。
现在我的问题是:
- 我可以仅 returned
authorization_code
来登录我的用户吗? (即代替 id_token
?)安全隐患是什么?在那种情况下,我可以继续在后端使用常规授权代码流。
- 有没有办法同时从 Google 检索 id_token 和 authorization_code 我还没有找到?
- 有没有其他方法可以达到我想要的效果? (使用 Google 登录前端,安全检索只有后端需要的 access_token/refresh_token)
谢谢!
我会在后端处理令牌管理,而不是在前端处理。
授权码仅作为授权码的一部分使用flow.The授权码只是一个随机令牌,不包含任何用户信息,因此您不能使用它来登录用户。
您不能同时获得 id_token 和 authorization_code,为什么?授权代码流程是一个两步过程,因此您总是先获得一个代码,然后您可以用它交换 id/access 令牌。
我会考虑观看这个 this 很棒的视频,了解如何处理 SPA 应用程序的身份验证。
我正在构建一个应用程序,用户应该可以在其中 使用 Google 登录,但之后,后端服务器需要访问来自用户的帐户(analytics.readonly
范围)。
如果我理解正确的话,这可以通过“OAuth Hybrid Flow”来完成:一个 id_token
和一个 authorization_code
在前面的通道上 returned,但是敏感的 access_token
和 refresh_token
只能在后台频道上检索。
然而,Google 似乎没有提供此功能。
我想象我的前端可以在 Google OAuth 流之后接收 id_token
和 code
作为 URL 参数。 React 前端然后 POST
id_token
和 code
到我的 Flask 后端。
后端然后 1) 检查 id_token
,2) 将 code
交换为 refresh/access token
和 return 一个经过身份验证的会话 cookie 到前端。
现在我的问题是:
- 我可以仅 returned
authorization_code
来登录我的用户吗? (即代替id_token
?)安全隐患是什么?在那种情况下,我可以继续在后端使用常规授权代码流。 - 有没有办法同时从 Google 检索 id_token 和 authorization_code 我还没有找到?
- 有没有其他方法可以达到我想要的效果? (使用 Google 登录前端,安全检索只有后端需要的 access_token/refresh_token)
谢谢!
我会在后端处理令牌管理,而不是在前端处理。
授权码仅作为授权码的一部分使用flow.The授权码只是一个随机令牌,不包含任何用户信息,因此您不能使用它来登录用户。
您不能同时获得 id_token 和 authorization_code,为什么?授权代码流程是一个两步过程,因此您总是先获得一个代码,然后您可以用它交换 id/access 令牌。
我会考虑观看这个 this 很棒的视频,了解如何处理 SPA 应用程序的身份验证。