Android 刷新令牌

Posted

技术标签:

【中文标题】Android 刷新令牌【英文标题】:Android refresh token 【发布时间】:2015-09-29 13:11:32 【问题描述】:

我正在开发一个 android 应用程序,我对令牌和刷新令牌有点困惑。 基本上现在,用户使用手机号码和短信发送的验证码登录后,认证服务器会返回一个访问令牌,该令牌将用于访问所有 API。对于身份验证服务器,我使用了 Laravel 和 jwt-auth 库。 当访问令牌过期时,我将使用存储在 AccountManager 中的用户凭据询问一个新的。 这是实现此身份验证的正确方法吗?

或者我错过了刷新令牌,当它过期时我要求一个新的访问令牌?

提前致谢, 丹尼尔

【问题讨论】:

永远不要将用户凭据存储在本地数据库中。您应该使用刷新令牌。 【参考方案1】:

我认为最好同时使用tokenrefresh token,这样您就不必在access token 过期时发送您的凭据。此外,将用户凭据存储在客户端设备上并不安全,您应该将此信息存储在您的服务器上,并要求用户在需要时输入。

这里我是如何实现令牌/刷新令牌过程的:

1:您将credentials 发送到您的身份验证服务器(它会向您发送一个access token(我使用未存储在数据库中的JSON web token 类型)和一个refresh token(存储在数据库)。

2 : 当您向服务器发出请求时,您会检查 access token 是否已过期,如果已过期,请在参数中使用 refresh token 向您的身份验证服务器发出请求,以获得新的 @ 987654332@(取决于您的服务器配置,它可以给您一个新的access token,或者我更喜欢的一对新的access tokenrefresh token)。

3:如果refresh token 已过期,您可以向您的credentials 发出请求以获得一对新令牌。

【讨论】:

感谢弗雷德里克。最后我在这个过程中使用了 laravel (github.com/tymondesigns/jwt-auth/wiki) 的 JWT-auth 库: 1. 用户将他的凭据发送到身份验证服务器 2. 使用该库创建访问令牌 3. 我将此令牌存储为 AccountManager 类中的密码Android 4. 当令牌过期时,我请求使用它的新令牌 5. 如果新令牌的请求失败,我要求用户重新发送凭据。你认为这是一个正确的过程吗? 通常我们使用刷新令牌来限制使用通过网络发送到身份验证服务的客户端凭据。 “访问令牌的生存时间越短,客户端凭据用于获取新访问令牌的次数就越多,因此攻击者破坏客户端凭据的机会就越大。因此,如果您有一次性使用刷新令牌,您可以在不影响客户端凭据的情况下将访问令牌的 ttl 设置为任意小。”在***.com/questions/3487991/… @Frédéric:如果您的刷新令牌泄露,例如由于 Android 手机已root --> 那么攻击者可以继续更新令牌。你会为每个用户生成一个唯一的刷新令牌吗?

以上是关于Android 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

Android OAUTH:刷新我的令牌

Android OkHttp,刷新过期令牌

Android中的Oauth2刷新令牌更新

如何在android中获取google plus的刷新令牌?

Android:OAuth Microsoft 云健康 API 中未返回刷新令牌

Android:如何通过 Google 登录 API 获取刷新令牌?