【发布时间】:2019-01-15 10:17:07
【问题描述】:
我了解使用 OAuth2 的流程是:
在短期访问令牌过期(服务器返回 401)后,客户端必须使用刷新令牌请求一个新令牌。
要在 iOS(使用 AFNetworking)或 Android(使用 Volley)应用程序中实现它,我想网络管理器必须能够检测返回的 401 错误,然后向身份验证服务器发送请求。
问题在于网络的并发使用。考虑访问已过期的场景,应用程序发送 2 个请求:req1 和 100 毫秒后,req2。绘制在时间轴上,如下所示:
req1 --> 401 --> (refresh req) --> OK, new access and fresh tokens --> retry req1
req2 --> 401 --> (refresh req) --> 403, wrong refresh token
最终结果是req2会失败,应用会因为403错误退出用户。
所以我的问题是
这个实现是否朝着正确的方向发展?还是收到401后刷新不对?我是否应该在用户启动应用程序时刷新令牌(以减慢应用程序启动为代价)
如何解决并发问题?
【问题讨论】:
-
你在android中使用哪个库进行api调用??
-
@ChandrakantDvivedi 我正在使用 Volley
-
我用的是okHttp,这里提供了拦截器,可以在请求和响应之间进行拦截。
-
Volley 也可以,问题是如何兑换代币
-
@Siyu 你是否已经有一些令牌管理器实现,适用于顺序请求但可能会在并行请求上失败?
标签: android ios concurrency oauth-2.0 network-programming