使用OAuth 2.0刷新令牌的PHP控制台应用程序,如何存储?

时间:2014-06-16 16:04:40

标签: php authentication oauth oauth-2.0 access-token

我正在开发一个利用来自少数服务的API的PHP项目。对于单个API,它使用OAuth 2.0授权来验证应用程序的API访问权限。但是,我不确定如何处理验证本地控制台应用程序的过程。

我不会使用Webflow来验证API,因为我的PHP脚本在本地控制台中运行。 API允许通过输入我的用户名和密码来检索访问令牌和刷新令牌(他们建议仅用于控制台应用程序)。

获得访问令牌后,我可以使用它来发出API请求。这很好用。但是,我不确定如何处理我的刷新令牌。 API会消耗刷新令牌:

  

/ oauth2 / access_token /(刷新令牌使用情况)

     

上下文:客户端的Web服务器

     

必需参数:refresh_token,grant_type = refresh_token,   client_id,client_secret

     

访问令牌范围:无

     

成功时,会向客户端返回JSON响应:

{
  "access_token": a valid access token,
  "scope": scope as given in authorize,
  "expires_in": seconds to expiry,
  "refresh_token": a token that can be used to get a new access token
}
  

使用刷新令牌会立即使相关访问失效   令牌。刷新令牌是一次性使用。返回新的刷新令牌   来自这个电话,准备好以后再消费。

从我收集的内容来看,我的身份验证过程应该是这样的:

  1. 初始身份验证 - 通过环境变量传递用户名/密码,从响应中获取访问/刷新令牌
  2. 存储刷新令牌?检查初始访问令牌的到期时间
  3. 如果初始访问令牌已过期,请从文件中提取刷新令牌并请求新的访问/刷新令牌
  4. 存储新的刷新令牌?
  5. 这听起来像是正确的身份验证流程吗?我应该存储刷新令牌的具体方法吗?我知道简单地将刷新令牌存储在文本文件中可能存在很多安全问题,因为它能够提供对我的帐户的完全访问权限。还有更好的选择吗?

    谢谢!

1 个答案:

答案 0 :(得分:2)

身份验证流程很好。有关详细信息和验证,请阅读https://tools.ietf.org/html/rfc6749

您可以使用加密密钥在文件或数据库中存储“刷新令牌”,并且必须仅使用TLS传输。 “刷新令牌”用于senerios,其中服务器确实想要某些预定的后台活动,例如基于先前存储的访问令牌从其他oAuth服务器访问配置文件和相关数据,而不是一次又一次地再次询问用户名和密码。如果“访问令牌”无效,则“刷新令牌”将用于获取新的“访问令牌”以达到目的。