Oauth 如何保存刷新令牌?

Oauth 如何保存刷新令牌?,oauth,oauth-2.0,Oauth,Oauth 2.0,我正在尝试将身份验证功能添加到我的应用程序中。 身份验证服务器实现oauth 2.0 我不知道如何保存刷新令牌。我想将其保存到一个文件中,以便下次应用程序启动并且有可用的刷新令牌时,它可以请求新的访问令牌。用户无需再次登录 但这对我来说并不安全,因为如果有人将我的带有刷新令牌的文件复制到另一台计算机,他可以侵入我的帐户。您描述的攻击是正确的。刷新令牌必须安全存储,以便按预期使用。据我所知,您正在构建一个独立的应用程序。因此,您可以依靠文件系统安全性来防止未经授权的用户复制刷新令牌。您可能也想对刷

我正在尝试将身份验证功能添加到我的应用程序中。 身份验证服务器实现oauth 2.0

我不知道如何保存刷新令牌。我想将其保存到一个文件中,以便下次应用程序启动并且有可用的刷新令牌时,它可以请求新的访问令牌。用户无需再次登录


但这对我来说并不安全,因为如果有人将我的带有刷新令牌的文件复制到另一台计算机,他可以侵入我的帐户。

您描述的攻击是正确的。刷新令牌必须安全存储,以便按预期使用。据我所知,您正在构建一个独立的应用程序。因此,您可以依靠文件系统安全性来防止未经授权的用户复制刷新令牌。您可能也想对刷新令牌使用加密,但密钥需要绑定到本地计算机上的用户会话(否则,用户需要在“登录”过程中提供密钥,以便应用程序解密刷新令牌)

考虑阅读OAuth工作组中的线程,该线程讨论了与所述问题类似的问题,并提供了一些指导:

您的担心是对的-您不应该保存刷新令牌。这样做会危害到客户的数据(并且你知道原因;你在问题中写了它)。 oAuth不应该以这种方式工作。
您应该将刷新令牌保存在内存中。

刷新令牌用于获取访问权限(此过程需要HTTP基本身份验证)。所以,除非用户拥有您的(id,秘密)组合,否则他对此无能为力。然而,必须非常认真地考虑刷新令牌的存储

这是我的两分钱:

  • 将您的令牌存储在数据库中

  • 每当您使用刷新令牌获取访问令牌时,请同时重置刷新令牌。(Oauth2.0具有此功能,您也可以让刷新令牌保持不变,但从安全角度来看,明智的做法是保持其更改和更新数据库)


  • 希望这能给你一些启示

    但是,当刷新令牌耗尽内存时,它将丢失,用户必须在再次运行应用程序之前提示用户进行访问。@JasonHall True;为了避免向用户索要凭据,应用程序设计者必须同意危害用户的安全(如果令牌不知何故被盗)。您可以加密凭据或将其存储在服务器上,并在应用程序启动时(安全地)获取凭据。但如果这不可行,那么是的,你可以在应用启动时请求许可。现在,我正在加密它并将其保存到文件中。我使用机器的mac地址生成加密密钥,这样当文件复制到另一台计算机时,它就不能被解密。但这听起来仍然很弱。这不是很好的安全建议。刷新令牌旨在最大限度地减少用户登录凭据通过网络发送的次数。客户应将其长期保存。是的,客户机的秘密存储机制可能会受到损害,但客户机上的所有内容也可能受到损害。如果怀疑令牌被泄露,您可以从服务器端将其列入黑名单刷新令牌,从而迫使用户重新进行身份验证。请在此处查看包含以下代码行的部分:
    来自oauth2client.file import Storage
    。当我使用该代码创建存储时,它只是创建了一个包含所有信息的普通JSON文件。此类
    oauth2client.file.Storage
    的一个优点是它应该是线程安全的。然而,这里没有使用加密,所以我很难过。谷歌建议尽可能使用他们的图书馆,以避免“把事情搞砸”。但是,该存储类并没有起到多大作用。想法?刷新令牌仍然可以被劫持/拦截。。。。这对逆向工程来说很容易。只是不要使用刷新令牌,而是使用某种黑名单使用具有无效性的justaccess令牌。。。刷新令牌没有帮助客户端上的所有东西都不安全我来晚了,但是你的第二个“分”不是破坏了刷新令牌的全部用途吗?重置刷新令牌将要求用户重新进行身份验证。重置刷新令牌不需要重新身份验证。重置刷新令牌会破坏刷新令牌的用途。刷新令牌是一个长寿命的令牌,因此用户可以从中生成访问令牌。通过重置刷新令牌本身,实际上是将刷新令牌转换为访问令牌。@Tanmay重置刷新令牌不会使其成为访问令牌。。此刷新步骤仅确保即使您的令牌被破坏也不会造成任何伤害。“重置刷新令牌不需要重新验证。”:实际上,这取决于API。对于eBay的API来说,确实如此。对于其他API,可能不是这样。