如何使用 Google Auth JWT 授权登录用户? (图片)

Posted

技术标签:

【中文标题】如何使用 Google Auth JWT 授权登录用户? (图片)【英文标题】:How to authorize logged in users using Google Auth JWT? (Picture) 【发布时间】:2021-06-02 13:30:56 【问题描述】:

我目前有一个在 AWS Lambda 上运行的后端,并且我使用 DynamoDB 作为数据库。在 Dynamo 中,有一个用户列表,每个用户都有特定的权限,可以通过 API 访问哪些路由。这里没有问题。 我尚未构建前端,但我将使用 Google Auth 登录用户,更具体地说是with the react-google-login component。

我的问题是:一旦用户登录到网站,我是否应该信任来自 Google 的 JWT(在验证其合法性之后 here with the Google API) 返回用户信息(姓名、电子邮件),在 Dynamo 中查找用户项以检索他们的权限,然后服务他们的请求? 这似乎是合乎逻辑的事情,但我正在寻找一些确认。我的一个担心是有人可以使用主管姓名和电子邮件来授权请求​​,但如果 lambda 必须接受 Google 创建的 JWT 作为条目,我相信这个问题得到了正确解决?

我也为每个用户提供了一些外部功能的 API 密钥,但我已经涵盖了这些,因为它只是一个 Dynamo 调用。我唯一关心的是对 Lambda 的前端请求,因为我不想推出自己的 auth/jwt。

Here is what I was envisioning. 谢谢!

【问题讨论】:

【参考方案1】:

通常您应该为此目的使用访问令牌。 ID 令牌应仅用于对用户进行身份验证,而访问令牌应用于授权访问。

最好的方案是拥有一个单独的授权服务器,它可以发布访问令牌,并且有一些您可以使用的开源解决方案。

如果您真的不想设置自己的 AS,那么您可以按照您概述的方案进行操作 - 从 Google 验证 JWT 并检查 DynamoDB 中的权限的部分是授权服务器通常会执行的操作以发出访问令牌.

请记住彻底验证传入的 JWT - 不仅是与 Google 的签名,还要检查这是否是为您的客户/受众创建的令牌等。否则有人可能会从他们的客户那里获取 Google ID 令牌 JWT 并获得访问您的 API。 This article 列出了使用 JWT 时的最佳安全实践。

还请记住,ID 令牌的过期时间可能很短,并且无法自动刷新它们(就像在访问令牌的情况下可以使用刷新令牌一样),因此您最终可能不得不经常重新进行身份验证.

【讨论】:

感谢您的详细回复!我已经详细阅读了如何使用 Google 验证令牌,并决定这是最佳途径。那篇文章也有一些不错的提示,谢谢分享。回复:到期,我知道。我相信谷歌还会在登录时为您提供一个刷新令牌,因此无论是在反应应用程序中还是在后端,我都会在即将到期时请求一个新令牌。再次感谢!

以上是关于如何使用 Google Auth JWT 授权登录用户? (图片)的主要内容,如果未能解决你的问题,请参考以下文章

通过 Express / Auth0 后端登录用户

Auth0 授权后获取用户邮箱

Nest.js Auth Guard JWT 身份验证不断返回 401 未授权

Angular JWT Auth - 总是 401 未经授权

使用JWT作为auth的环回默认登录方法吗?

未找到授权令牌 - Express-JWT 和 Auth0