我跟随这篇文章来理解refesh令牌。
在我的情况下,我必须使用grant_type=password连接到RESTapi,并且我收到一个使用寿命为5分钟的令牌。因此,每5分钟我就必须发出一个POST请求,传递客户端id、用户名和密码;获取新acces令牌的密码。
另一种选择是发出grant_type=refresh_token的POST,而不必发送用户名&暗语在我的情况下,我正在使用一个api,所以传递凭据不涉及最终用户的任何操作。对我来说,这只是在POST请求时发送更多参数。
在这两种情况下,我必须每5分钟发布一个新帖子。
这是使用重读令牌的唯一优势(不需要再次传递凭据(吗?还是我还缺少其他东西?
背景信息
OAuth 2.0密码授予
密码授予类型是一种将用户凭据交换为访问令牌的方式。由于客户端应用程序必须收集用户的密码并将其发送到授权服务器,因此不建议再使用此授权。
OAuth 2.0刷新令牌
刷新令牌授予类型由客户端用于在访问令牌过期时将刷新令牌交换为访问令牌。
这允许客户端继续拥有有效的访问令牌,而无需与用户进行进一步交互。
想想这个
假设我将我的twitter帐户的登录名和密码添加到你的应用程序中,然后你用它来请求从twitter访问may帐户以发布。三个月后,我忘记了我已经设置了你很棒的应用程序来在我的推特账户上做一些事情,我更改了我的密码。你的系统会崩溃。
现在,假设我使用Oauth2授予您访问我的谷歌硬盘帐户的权限,您出色的应用程序现在可以在我的硬盘帐户上做任何需要做的事情。三个月后的今天,我再次忘记了我给了你很棒的应用程序访问权限,我有你看到的金鱼的记忆。我更改了密码。什么都没发生,你的应用程序仍然可以访问。
现在考虑一下,使用oauth2,我可以允许您只从我的谷歌驱动器帐户读取,而不更新它(范围(。而且系统知道它实际上不是我预先制定的行动。
在客户端登录(登录名和密码(的情况下,大多数情况下,系统会认为它实际上是发出请求的帐户的所有者。在大多数情况下,您也可以不限制客户端登录的访问权限。
注释
是的,我忽略了关于返回的两个令牌都是过期时间的部分。这是因为出于所有密集目的,它们是相同的,但这在很大程度上取决于您使用的身份验证服务器的设置方式。它们可以设置为仅在一小时或一天内有效。它们可能会为您提供不同的访问范围,同样,不同的身份验证服务器的访问范围也有很大不同。