Android OAuth2不记名令牌最佳实践

问题描述:

This nice tutorial是一个非常好的Android入门认证介绍,并通​​过利用Android的AccountManager进行。Android OAuth2不记名令牌最佳实践

但是,我需要使用承载令牌为身份验证创建OAuth2 API的客户端应用程序。在获取令牌时,我会收到它的过期时间戳,但我不清楚存储位置以及如何正确使用它。 问题是,如果我不想不必要地访问服务器,应用程序会意识到,只有在请求任何随机资源时,服务器收到HTTP 401错误后,它才会失效。那么,解决这个问题的最佳做法是什么:

  1. 我的代码中的每个网络请求是否都有一个重试机制,以防持用者令牌在此期间变得无效?捕捉异常并重试时,我可能会invalidateAuthToken
  2. 可以Sync Adapter以某种方式帮助吗?

由于我是Android开发新手,我预计解决方案也可能与我预期的完全不同。

如果相关,我打算使用Volley进行服务器通信。

我发现我自己的答案有点调查后:

  1. 是,调用AccountManager#invalidateAuthToken删除最后保存的认证令牌(在加入OAuth2情况下访问令牌),并期待您检测在请拨打AccountAuthenticator#getAuthToken。例如,下面是我为这个方法的代码:

    我也收到了这个问题提到confirmation from the author of the blog post

  2. SyncAdapter s不能直接帮助,因为他们的真正目的是从网络异步(对于开发人员)和透明地(对于用户)从网络获取数据。他们只是使用AbstractAccountAuthenticator并在适当的地方调用它的方法。

+1

任何人都可以指出,当使用帐户管理器持久授权令牌和刷新令牌时它有多安全吗? 我们遇到了一群安全审计员,他们说客户经理不保证令牌信息的安全。但我找不到一个适当的方法让他们在任何其他地方。 –

+0

@sahan,所有内容都以纯文本形式存储在帐户管理器中,但只能在根用户设备上访问。令牌的要点是允许可撤销认证而不暴露用户的真实登录细节,您不必担心如何将它们存储在设备上。 – sixones

我之前经历过同样的问题,并且使得此library在Android中处理OAuth2。但该库是Retrofit的扩展,它简化了对OAuth 2提供程序进行身份验证的过程,但您仍然可以使用它。