【问题标题】:Status codes for JWT Token casesJWT Token 案例的状态码
【发布时间】:2018-05-19 23:04:25
【问题描述】:
身份验证是使用 JWT 实现的。对于令牌的所有到期/无效情况,建议使用401 状态码。但是,来自客户端的刷新令牌重试应该只在“过期”的情况下进行,而不是在“无效”的情况下进行。那么,如何使用适当的状态码来区分这些情况呢? (即,第一种情况可以使用什么状态码,第二种情况可以使用什么状态码?)
【问题讨论】:
标签:
ruby-on-rails
authentication
error-handling
jwt
http-status-codes
【解决方案1】:
我不建议区分这些情况,这样您就可以保持独立,因为还有许多其他情况可能会导致访问令牌被禁止。
理论上,提供者可能会更改刷新令牌生成过程的实现,因此刷新令牌可能仅在客户端在获取访问令牌时始终获得最近的刷新时才有效。
如果您仍想区分这两种情况,则可以向响应负载添加原因并构建处理每个原因的逻辑。但这仍然是一个必须解决的安全问题,如果您想向用户提供理由,因为您向客户提供的信息与为攻击打开大门一样多。
【解决方案2】:
- 获取令牌的唯一方法是颁发更新的 JWT 令牌。
- 即使它过期了,它也是无效的,所以我认为你无论如何都必须更新令牌。
- 可能是你想自动重试。在某些方面,这意味着令牌是无用的。因为您的客户可以随时续订。你需要一个详细和具体的案例标准。