Android OAuth2不记名令牌最佳实践
问题描述:
This nice tutorial是一个非常好的Android入门认证介绍,并通过利用Android的AccountManager
进行。Android OAuth2不记名令牌最佳实践
但是,我需要使用承载令牌为身份验证创建OAuth2 API的客户端应用程序。在获取令牌时,我会收到它的过期时间戳,但我不清楚存储位置以及如何正确使用它。 问题是,如果我不想不必要地访问服务器,应用程序会意识到,只有在请求任何随机资源时,服务器收到HTTP 401错误后,它才会失效。那么,解决这个问题的最佳做法是什么:
- 我的代码中的每个网络请求是否都有一个重试机制,以防持用者令牌在此期间变得无效?捕捉异常并重试时,我可能会
invalidateAuthToken
。 - 可以Sync Adapter以某种方式帮助吗?
由于我是Android开发新手,我预计解决方案也可能与我预期的完全不同。
如果相关,我打算使用Volley进行服务器通信。
答
我发现我自己的答案有点调查后:
-
是,调用
AccountManager#invalidateAuthToken
删除最后保存的认证令牌(在加入OAuth2情况下访问令牌),并期待您检测在请拨打AccountAuthenticator#getAuthToken
。例如,下面是我为这个方法的代码:我也收到了这个问题提到confirmation from the author of the blog post。
SyncAdapter
s不能直接帮助,因为他们的真正目的是从网络异步(对于开发人员)和透明地(对于用户)从网络获取数据。他们只是使用AbstractAccountAuthenticator
并在适当的地方调用它的方法。
任何人都可以指出,当使用帐户管理器持久授权令牌和刷新令牌时它有多安全吗? 我们遇到了一群安全审计员,他们说客户经理不保证令牌信息的安全。但我找不到一个适当的方法让他们在任何其他地方。 –
@sahan,所有内容都以纯文本形式存储在帐户管理器中,但只能在根用户设备上访问。令牌的要点是允许可撤销认证而不暴露用户的真实登录细节,您不必担心如何将它们存储在设备上。 – sixones