【问题标题】:Storing Google Refresh Token in Database?将 Google 刷新令牌存储在数据库中?
【发布时间】:2017-10-30 23:03:06
【问题描述】:

我正在构建一个提供使用 google 选项登录的 Web 应用程序。最初我们向用户询问profileemail 范围(离线访问)。作为回报,我们得到一个code

使用此代码,我请求refresh_token,然后请求access_token。这两个令牌都存储在客户端的 cookie 中(您可能会说在客户端存储 refresh_token 是个坏主意)。

在我的应用程序中,我为用户提供了访问他的驱动器文件的权限。为此,我使用增量范围。所以我问用户的驱动权限。作为回报,我得到一个code -> 新的refresh_token -> 新的access_token

但问题是:

当用户清除 cookie 或注销时。然后当他登录时,会生成新的refresh_tokenaccess_token,其中只包含profileemail 的范围。所以我不得不再次询问用户他的驱动器权限。我不想每次都向用户询问他已经给予他们的驾驶许可。

可能的解决方案:

在服务器端存储refresh_token??这是正确的方法吗??

【问题讨论】:

  • 我为我正在工作的项目所做的是将它们加密发送到 dynamo db,在那里可以访问刷新令牌,以便您可以生成新的访问令牌,然后将其解密当你检索它时。
  • @JosephMckenzie 所以在登录用户后(你得到一个访问令牌)你从数据库中获取刷新令牌并生成一个新的访问令牌并覆盖旧的访问令牌??
  • 是的,如果您愿意,我可以与您分享基本代码
  • 肯定会有帮助的人
  • 我也有同样的问题,但对我来说,存储刷新令牌似乎是一个安全漏洞,就好像你的数据库曾经被入侵一样,攻击者会突然对你的所有用户拥有谷歌驱动器访问权限,除非我错过了什么?

标签: google-api oauth-2.0 google-oauth


【解决方案1】:

这是 Google 推荐的方法:

应用程序应存储刷新令牌以供将来使用,并使用访问令牌访问 Google API。访问令牌过期后,应用程序会使用刷新令牌来获取新令牌。

从这里:https://developers.google.com/identity/protocols/oauth2

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 2021-09-23
    • 2018-04-28
    • 2018-11-12
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多