移动应用如何在没有refresh_token的情况下刷新access_token?隐含授权/ OAuth 2

时间:2018-02-06 13:56:13

标签: oauth oauth-2.0 access-token openid-connect

OAuth2 rfc6749

所述
  

隐式授权类型用于获取访问令牌(它没有      支持发布刷新令牌,并针对公众进行了优化      已知操作特定重定向URI的客户端。这些客户      通常使用脚本语言在浏览器中实现

刷新令牌不适合隐式授权。 我的问题是:

  • 移动应用如何在过期后刷新 access_token
  • 市场上的大公司是如何做到这一点的?他们遵循哪些做法?
  • 我知道它不遵循安全性建议,但在这种情况下制作长期存在的 access_token 是一个好习惯吗?如果您使用应用程序每30分钟需要重新进行身份验证,或者关闭并重新打开它,这会很烦人。
  • 必要的权限不会改变,每个应用程序启动时的静默登录都是可以考虑的选择吗?

2 个答案:

答案 0 :(得分:0)

原生应用应该使用授权代码授权。所以你可以使用刷新令牌。有RFC讨论了该原因(主要是安全性)以及平台特定的详细信息。有一个重要的含义 - 您的OAuth2提供程序的/token端点不应要求获取令牌进行身份验证,因为您的应用程序无法保证其客户端的安全。

答案 1 :(得分:0)

一旦访问令牌过期,您不一定需要刷新令牌才能继续使用。如果您必须坚持让客户使用隐式流程,那么他们可能能够利用cookie和重定向来持续获得短期令牌而无需用户交互。提供客户端应用程序正在使用可以使用永久cookie的HTTP代理。例如在网络浏览器中运行的应用程序。

然后,密钥是在第一次请求令牌时让用户登录身份提供者。

这是由身份提供者(我猜?)为用户代理持久创建HTTP cookie完成的。大多数大型身份提供商都会这样做 - 即让您登录。<​​/ p>

现在,当令牌过期时,您的客户端应用程序将再次通过Oauth进程发回用户,但是,由于用户仍然登录到身份提供商,身份提供商可以从cookie中对用户进行身份验证,而不会提示输入凭据。

如果您的客户在后台线程上发起此令牌续订,他们可以正常请求令牌,并通过HTTP重定向和Cookie的魔力,从您那里获取新令牌,无需用户操作。

再次 - 刷新令牌的替代方案依赖于客户端设备能够使用永久性cookie,并且您的用户仍然登录并且您的auth服务器处理http cookie。如果您的客户使用本机应用程序,则此解决方案可能无效。

在未来,您将有100个客户端,也许您的auth平台应该为不同的客户提供不同的身份验证流程。

关于combine_first的这篇文章可能会让您感兴趣。