我目前有一个在 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 key ,但我已经涵盖了这一点,因为这只是 Dynamo 调用即可。我唯一关心的是前端对 Lambda 的请求,因为我不想推出自己的 auth/jwt。
最佳答案
通常您应该为此目的使用访问 token 。 ID token 应仅用于验证用户身份,而访问 token 应用于授权访问。
最好的方案是拥有一个可以颁发访问 token 的单独的授权服务器,并且您可以使用一些开源解决方案。
如果您确实不想设置自己的 AS,那么您可以按照您概述的方案进行操作 - 从 Google 验证 JWT 并检查 DynamoDB 中的权限的部分是授权服务器通常会执行的操作来颁发访问 token .
只需记住彻底验证传入的 JWT - 不仅是 Google 的签名,还要检查这是否是为您的客户/受众等创建的 token 。否则,有人可能会从其客户那里获取 Google ID token JWT 并获得访问您的 API。 This article列出了使用 JWT 时的最佳安全实践。
另请记住,ID token 的过期时间可能很短,并且无法自动刷新它们(就像您可以在访问 token 的情况下使用刷新 token 来执行此操作),因此您最终可能需要经常重新进行身份验证.
关于oauth-2.0 - 如何使用 Google Auth JWT 授权登录用户? (图片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66465931/