我编写了一个Web应用程序,该应用程序使用OAuth的“授权代码”授权类型来检索初始访问令牌,然后使用“刷新令牌”授权类型来偶尔刷新访问令牌。
但是,当OAuth服务器陷入困境并且刷新令牌的请求花费很长时间(超过10秒)时,就会出现问题。客户端将使请求超时并取消它,但服务器最终将完成请求。服务器满足请求后,它将生成新的访问令牌和刷新令牌,同时使旧的刷新令牌无效。客户端永远不会收到新令牌。
现在,下一次客户端再次尝试更新其令牌时(当服务器没有陷入瘫痪时),它将尝试使用无效的(旧的)刷新令牌进行更新。现在,解决此问题的唯一方法是再次使用“授权码”授予,这需要最终用户进行手动干预。
其他人如何解决此问题?
答案 0 :(得分:1)
我在我工作过的一家公司看到过完全相同的问题。
我给他们的建议是不要使刷新令牌过期/轮换。 Oauth协议允许刷新令牌轮换,但不需要。在Oauth threat model中,讨论了该值及其含义,包括以下注释:
注意:此措施可能在群集环境中引起问题,
因为必须确保使用当前有效的刷新令牌。在 这样的环境,其他措施可能更合适。
您正在处理的案件(除上述注释外)是另一个原因,说明刷新令牌到期不是一个好主意。
如果您对此无能为力,则必须开发一些风管式废纸udge解决方案,在其中保留刷新令牌,并在服务器端用过期的刷新令牌替代当前令牌。这很丑陋,但很丑陋,但是不幸的是,我不确定使用这种痛苦的安全控制可以做更多的事情,而这会带来更多的问题,而不是值得的。