我需要为 OAuth2 服务器到服务器通信存储哪些数据?



Background

我的应用程序正在从许多不同的源 (API) 获取数据并跨它们进行聚合。因此,用户通过 OAuth2 登录到源一次,然后我不断调用源。

我正在使用thephpleague/oauth2-client连接到不同的服务,我还使用构建在上面的提供程序包连接到不同的网站。我在那里绝对没有问题。

身份验证后,我会得到一个LeagueOAuth2ClientTokenAccessToken实例。

现状

现在对于存储,我对AccessToken实例执行json_encode并存储生成的非结构化string。为了加载它,我json_decode并通过构造函数创建一个新实例。不是很有趣。

问题

如果我想以结构化方式存储访问令牌(通常是 OAuth 响应),我需要哪些数据?服务器到服务器通信需要保留什么?具体项目及其类型?我正在尝试找出用于存储许多不同提供程序的数据模型。

#Sources 答案的来源是 2 倍:

  1. RFC: https://www.rfc-editor.org/rfc/rfc6749#section-5.1 - 给定 RFC,字段为:
  • access_token- 伪类型string的必需值
  • token_type- 伪类型string的必需值
  • expires_in- 伪型int的推荐值
  • refresh_token- 伪类型string的可选值
  • scope- 伪类型string的可选值,如果授予的作用域与请求中要求的作用域不同

RFC 规定The client MUST ignore unrecognized value names in the response.,但是在本节中提供的示例中,它们包括以前未定义的value name

  1. 提到的库: https://github.com/thephpleague/oauth2-client/blob/master/src/Token/AccessToken.php#L59 - 给定构造函数:
  • access_token- 伪类型string的必需值
  • resource_owner_id- 伪类型string的可选值
  • refresh_token- 伪类型string的可选值
  • expires_in- 伪类型int的可选值,作为伪类型int的值回退到expires

传递到构造函数的任何其他内容都被视为额外数据。

#Implications

  • access_tokenrefresh_token都应存储为字符串,但需要注意refresh_token可以为 null
  • token_type隐含在所使用的库中,在这种情况下不是必需的,但可能适用于其他一些人。
  • expires_in应存储为时间点的某种表示形式。
  • resource_owner_id是库可以使用的自定义值名称。如果要使用它,请将其存储为字符串。
  • 如果应用程序在 API 请求之前测试范围授权,则存储scope可能很有用。将其存储为字符串。
  • 其他任何内容都是自定义值,应按自定义值处理。不同提供程序之间的值名称重叠的可能性非常低。可以存储为字符串数组。

最新更新