如何让我的用户使用刷新令牌安全地登录?

How to securely keep my users signed in with refresh tokens?

来自:

The idea of refresh tokens is that if an access token is compromised, because it is short-lived, the attacker has a limited window in which to abuse it.

我明白了,但是如果攻击者访问刷新令牌,他们将能够获得新的授权令牌,我错了吗?这似乎只是推迟了长期存在的令牌安全漏洞...

关于这一点,你会发现同一个答案:

Refresh tokens, if compromised, are useless because the attacker requires the client id and secret in addition to the refresh token in order to gain an access token.

那么使用刷新令牌和直接退出有什么区别?如果您不希望用户必须再次输入它们,您如何存储客户端 ID 和密码?


正如 所指出的,刷新令牌只能使用一次:攻击者随后将能够获得新的身份验证令牌,但只能使用一次,而且是短暂的。但是,一旦你已经使用了一个新的刷新令牌,你如何获得它呢?如果您在使用一个时得到一个新的,攻击者也将能够刷新他们的令牌...


实际问题是:如何让我的用户保持登录状态?在我使用的应用程序上,一旦我登录,我就永远不必再次登录:它们是如何进行的?

刷新令牌只能用于刷新一次,并且只有在客户端的访问令牌过期时才会发送到身份验证服务器。使用刷新令牌时,身份验证服务器 returns 一个新的身份验证令牌,以及一个可选的新刷新令牌。这个想法是允许使用短期访问令牌,同时允许有效的客户端重新验证而不强制用户再次登录。

如果刷新令牌被盗,那么攻击者可以使用一次来获取有效的访问令牌。当客户端尝试刷新他们的令牌时,他们的刷新令牌将过时,因此将被拒绝。然后他们会要求用户重新登录,认证服务器会给他们一个新的access token和refresh token,盗取的token会失效。