我正在尝试为我的应用添加身份验证功能。 身份验证服务器实现oauth 2.0
我不确定如何保存refresh_token。我想将它保存到文件中,因此下次应用程序启动并且有一个refresh_token可用时,它可以请求新的access_token。用户无需再次重新登录。
但这对我来说听起来并不安全,因为如果有人将我的具有refresh_token的文件复制到另一台计算机,他可以入侵我的帐户。
答案 0 :(得分:11)
您对所描述的攻击是正确的。必须安全地存储刷新令牌才能按预期使用。据我了解,您正在构建一个独立的应用程序。因此,您可以依赖文件系统安全性来防止未经授权的用户复制刷新令牌。您可能也希望对刷新令牌使用加密,但是密钥需要绑定到本地计算机上的用户会话(否则,用户需要在“登录”过程中提供它以便应用程序解密刷新令牌。)
考虑阅读OAuth工作组中的线程,该线程讨论与所描述类似的问题,并提供一些指导: https://www.ietf.org/mail-archive/web/oauth/current/msg02292.html
答案 1 :(得分:7)
刷新令牌用于获取访问权限(此过程需要HTTP Basic Auth)。因此,除非用户拥有您的(身份,秘密)组合,否则他无法做很多事情。但是,必须非常认真地考虑刷新令牌的存储。
这是我的两分钱:
将您的令牌存储在数据库中
每当您使用刷新令牌获取访问令牌时,也会重置刷新令牌。 (Oauth2.0具有此功能,您可以让刷新令牌保持不变,但从安全角度来看,保持更改和更新数据库是明智的)
希望这能提供一些见解!!
答案 2 :(得分:-3)
您对自己的担忧是正确的 - 您不应该保存刷新令牌。通过这样做,您会危害客户的数据(并且您知道原因;您在问题中写了它)。 oAuth不应该以这种方式工作。 您应该将刷新令牌保留在内存中。