是否有 JWT 刷新令牌
JWT refresh token or not
我正要将我的身份验证策略从每天过期一次的 httponly 中的直接 jwt 更改为刷新/不记名令牌方法。但是,既然刷新令牌可以创建新的令牌,这不是引入了巨大的风险吗?为什么人们推荐这个?我是不是漏了什么
因为刷新令牌会创建新令牌,但也会随着时间的推移使旧令牌过期,所以假设有人拿到了您的令牌,但由于您的服务器会自动使它过期,旧令牌将很少或根本没有用他。
如果您唯一需要获得新令牌的是旧令牌,那么它就没用了,因为拦截令牌的任何人都可以定期刷新它并且基本上可以永久访问 - 就像永不过期的令牌一样。
如果刷新令牌不需要 user/pass 并使旧令牌无效,那么这是危险的,因为拦截令牌的人可以为自己创建一个新令牌,同时使真实用户的令牌无效同时。因此,不仅有人可以访问您的帐户 - 您自己也会失去访问权限,雪上加霜。
如果旧令牌在获得新令牌后仍然有效并且不需要 user/pass 那么拦截令牌的人可以创建数千个新令牌并且所有这些令牌都是有效的,并且所有这些令牌都可以刷新以获得更多令牌。如果它们存储在数据库中,那么它可能成为拒绝服务攻击的载体。如果它们没有存储在数据库中,那么您将无法知道其中哪一个仍在流通,也无法使它们失效。
如果您需要使用 user/pass 或其他一些凭证来获取新的令牌,那么这意味着泄漏的令牌仅在一段时间内有效,因为它不能单独使用令牌刷新,但这也意味着真实用户需要更频繁地发送他们的 user/pass,这意味着拦截凭据的可能性更大。
我已经在现实世界的真实服务中看到了上述所有方法。
OpenID on Oauth2 中描述的访问和刷新令牌具有不同的用途:
- 访问令牌:授予对受保护资源的临时访问权限,生命周期非常短,甚至一次性使用
- 刷新令牌:允许获取新令牌,长期存在,必须保持安全。
在 OAuth2 授权流程中,用户身份验证成功后,服务器会提供一个授权码,可在第二步中使用该授权码从令牌端点获取访问和刷新令牌。刷新令牌安全存储,例如在服务器端。客户端代理使用访问令牌进行身份验证。
访问令牌仅在 exp
时间之前有效。由于它们是 short-lived,潜在盗窃造成的损失是有限的。当访问令牌即将过期时,安全性未受到损害的刷新令牌用于从令牌端点
获取新的short-lived访问令牌
我正要将我的身份验证策略从每天过期一次的 httponly 中的直接 jwt 更改为刷新/不记名令牌方法。但是,既然刷新令牌可以创建新的令牌,这不是引入了巨大的风险吗?为什么人们推荐这个?我是不是漏了什么
因为刷新令牌会创建新令牌,但也会随着时间的推移使旧令牌过期,所以假设有人拿到了您的令牌,但由于您的服务器会自动使它过期,旧令牌将很少或根本没有用他。
如果您唯一需要获得新令牌的是旧令牌,那么它就没用了,因为拦截令牌的任何人都可以定期刷新它并且基本上可以永久访问 - 就像永不过期的令牌一样。
如果刷新令牌不需要 user/pass 并使旧令牌无效,那么这是危险的,因为拦截令牌的人可以为自己创建一个新令牌,同时使真实用户的令牌无效同时。因此,不仅有人可以访问您的帐户 - 您自己也会失去访问权限,雪上加霜。
如果旧令牌在获得新令牌后仍然有效并且不需要 user/pass 那么拦截令牌的人可以创建数千个新令牌并且所有这些令牌都是有效的,并且所有这些令牌都可以刷新以获得更多令牌。如果它们存储在数据库中,那么它可能成为拒绝服务攻击的载体。如果它们没有存储在数据库中,那么您将无法知道其中哪一个仍在流通,也无法使它们失效。
如果您需要使用 user/pass 或其他一些凭证来获取新的令牌,那么这意味着泄漏的令牌仅在一段时间内有效,因为它不能单独使用令牌刷新,但这也意味着真实用户需要更频繁地发送他们的 user/pass,这意味着拦截凭据的可能性更大。
我已经在现实世界的真实服务中看到了上述所有方法。
OpenID on Oauth2 中描述的访问和刷新令牌具有不同的用途:
- 访问令牌:授予对受保护资源的临时访问权限,生命周期非常短,甚至一次性使用
- 刷新令牌:允许获取新令牌,长期存在,必须保持安全。
在 OAuth2 授权流程中,用户身份验证成功后,服务器会提供一个授权码,可在第二步中使用该授权码从令牌端点获取访问和刷新令牌。刷新令牌安全存储,例如在服务器端。客户端代理使用访问令牌进行身份验证。
访问令牌仅在 exp
时间之前有效。由于它们是 short-lived,潜在盗窃造成的损失是有限的。当访问令牌即将过期时,安全性未受到损害的刷新令牌用于从令牌端点