为什么访问令牌过期?
我刚刚开始使用Google API和OAuth2。 当客户授权我的应用时,我会得到一个“刷新令牌”和一个短暂的“访问令牌”。 现在每次访问令牌过期时,我都可以将我的刷新令牌发送给Google,他们会给我一个新的访问令牌。
我的问题是访问令牌到期的目的是什么? 为什么不能有一个持久的访问令牌而不是刷新令牌?
另外,刷新令牌是否过期?
有关Google OAuth2工作流程的更多信息,请参阅使用OAuth 2.0访问Google API。
这是非常具体的实现,但总体思路是允许提供商发布具有长期刷新令牌的短期访问令牌。 为什么?
有两种情况可能有助于说明访问和刷新令牌的目的以及设计oauth2(或任何其他身份验证)系统时的工程权衡:
Web应用场景
在Web应用程序场景中,您有几个选项:
让我们假设有人设法劫持你的会话。 唯一可能的是请求你的页面。
比较1和2:
在1中,access_token和refresh_token仅通过授权服务器(您的情况下为google)和您的应用服务器之间的线路传输。 这将在安全通道上完成。 黑客可能会劫持会话,但他们只能与您的网络应用进行交互。 在2中,黑客可以将access_token带走,并向用户授权访问的资源形成自己的请求。 即使黑客获取了access_token,他们也只会有一个短窗口访问资源。
无论哪种方式,只有服务器知道refresh_token和clientid / secret才能从Web浏览器获得长期访问权限。
假设你正在实现oauth2并在访问令牌上设置一个很长的超时时间:
1)在短的和长的访问令牌之间没有太大的区别,因为它隐藏在应用服务器中。 2)有人可以在浏览器中获取access_token,然后使用它长时间直接访问用户的资源。
移动场景
在手机上,我知道有几种情况:
将clientid / secret存储在设备上,让设备协调获取对用户资源的访问权限。
使用后端应用程序服务器来保存客户/秘密并使其进行编排。 使用access_token作为一种会话密钥,并在客户端和应用服务器之间传递它。
比较1和2
在1)一旦你有设备clientid /秘密他们不再是秘密。 任何人都可以反编译,然后开始行动,就像他们是你一样,并获得用户的许可。 access_token和refresh_token也在内存中,可以在受感染的设备上访问,这意味着有人可以在用户没有提供凭据的情况下充当您的应用。 在这种情况下,由于refresh_token与access_token位于同一位置,因此access_token的长度对hackability没有影响。 在2)clientid /秘密或刷新令牌都会受到影响。 在这里,access_token过期的长度决定了黑客何时可以访问用户资源,只要他们能够掌握它。
到期长度
这取决于您使用auth系统确保您的access_token过期多长时间。 如果它对用户来说特别有价值,那么它应该很短。 价值较低的东西,可能会更长。
有些人喜欢谷歌不会过期refresh_token。 有些像堆栈一样。 有效期限的决定是用户易用性和安全性之间的折衷。 刷新令牌的长度与用户返回长度有关,即将刷新设置为用户返回应用的频率。 如果刷新标记没有过期,那么它们被撤销的唯一方式是显式撤销。 通常情况下,登录不会被撤销。
希望相当长的帖子是有用的。
它本质上是一种安全措施。 如果您的应用程序受到攻击,攻击者将只能访问短期访问令牌,无法生成新的访问令牌。
刷新令牌也会过期,但它们应该比访问令牌的寿命长得多。
链接地址: http://www.djcxy.com/p/47937.html上一篇: Why do access tokens expire?
下一篇: Colon in JSON string