【问题标题】:How to authenticate both the web app and backend with Google/OAuth2?如何使用 Google/OAuth2 对 Web 应用程序和后端进行身份验证?
【发布时间】:2022-01-13 01:37:08
【问题描述】:
我正在尝试编写一个应用程序:
- 在浏览器中,使用 Google 帐户对用户进行身份验证。
- 调用后端服务。
- 后端访问用户的驱动器(和其他一些东西),然后返回 JSON。
前端:从网上复制了一些示例,可以毫无问题地进行身份验证。
后端:Node.js/Passport.js。复制一个例子的代码,可以验证。
但我如何在浏览器中验证用户身份,然后调用 API 以便 API 可以访问 Google Drive?预期流量是多少?
A. Web 应用程序对用户进行身份验证然后将 id_token 传递给服务器?
找不到如何在服务器上实现它...
要么:
B. 服务器将应用程序发送到同一服务器上的/auth/google/,然后应用程序从服务器获取令牌?
【问题讨论】:
标签:
oauth-2.0
google-oauth
passport.js
【解决方案1】:
将 OAuth2 视为权限委托协议 - 用户(资源所有者)进行身份验证并同意将访问令牌(或其他一些令牌)传递给启动流程的 OAuth2 客户端。当客户端收到访问令牌时,它可以代表他的用户并访问资源服务器(Google Drive)上的资源。
因此,如果您的后端想要访问 Google Drive,最简洁的方法是让您的后端成为 OAuth2 客户端,将用户重定向到 Google 身份验证服务器,然后接收身份验证代码。客户必须请求允许其访问 Google Drive 的范围。授权码可以换取访问令牌。要访问 Google Drive,后端需要在请求的 Authorization HTTP 标头中发送有效的访问令牌。
如果您的前端也需要令牌,您可以将其用作 OAuth2 客户端,并在 HTTP 标头中将它们传递给后端。