authentication - 如何“使用 Google 登录”(id_token)*和*接收特定范围的代码/access_token(用于后端)
问题描述
我正在构建一个应用程序,用户应该能够使用 Google 登录,但之后,后端服务器需要访问用户帐户(analytics.readonly
范围)中的一些数据。
如果我理解正确,这可以通过“OAuth Hybrid Flow”来完成:Anid_token
和 anauthorization_code
在前面的通道上返回,但是敏感的access_token
并且refresh_token
只能在后面的通道上检索。
然而,谷歌似乎并没有提供这个功能。
我想象我的前端可以在 Google OAuth 流程之后同时接收 anid_token
和 acode
作为 URL 参数。然后,React 前端将POST
同时id_token
连接code
到我的 Flask 后端。
然后后端将 1) 检查id_token
2) 交换code
arefresh/access token
并将经过身份验证的会话 cookie 返回到前端。
现在我的问题:
- 我可以只使用返回
authorization_code
来登录我的用户吗?(即,而不是id_token
?)安全隐患是什么?在这种情况下,我可以继续在后端使用常规的授权代码流。 - 有没有办法同时从谷歌检索一个 id_token 和一个授权码,我还没有找到?
- 还有其他方法可以实现我想要的吗?(使用 Google 登录前端,安全检索只有后端需要的 access_token/refresh_token)
谢谢!
解决方案
我会在后端处理令牌管理,而不是在前端进行。
授权码仅用作授权码流程的一部分。该代码只是一个随机令牌,不包含任何用户信息,因此您不能使用它来登录用户。
您不能同时获得 id_token 和 authorization_code,为什么?身份验证代码流是一个两步过程,因此您总是首先获得一个代码,然后您可以交换 id/访问令牌。
我会考虑看这个很棒的视频,了解如何处理 SPA 应用程序的身份验证。
推荐阅读
- javascript - javascript中的groupby使用ArrayObject.reducer()
- recursion - 递归产品 mips
- java - JTextArea 不会出现在具有空布局的 JPanel 上
- python - 更好的 Kivy 点击拖拽画线
- javascript - Exif 返回值为 -6
- python - Python pygame如何从玩家射击子弹
- macos - 使 Visual Studio 编辑器不检查 ~ 文件
- reactjs - 如何调用一个函数已经从另一个函数中用于反应
- oracle - Powershell 不能使用数据库视图,除非重新编译
- javascript - 遍历 json 的 groupby 数组