0

背景

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

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

一旦我进行身份验证,我就会得到一个League\OAuth2\Client\Token\AccessToken实例。

现在的情况

现在为了存储,我json_encodeAccessToken实例上做一个并存储生成的非结构化string. 为了加载它,我json_decode通过构造函数创建了一个新实例。不是很有趣。

问题

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

4

1 回答 1

0

#Sources 答案的来源有 2 个:

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

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,回退到expires作为伪类型的值int

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

#影响

  • access_token并且refresh_token应该存储为一个字符串,警告refresh_token可以为空
  • token_type在使用的库中是隐含的,在这种情况下不是必需的,但可能适用于其他一些人。
  • expires_in应该存储为某个时间点的某种表示。
  • resource_owner_id是您的库可以使用的自定义值名称。如果您想使用它,请将其存储为字符串。
  • scope如果您的应用程序在 API 请求之前测试范围授权,则存储可能很有用。将其存储为字符串。
  • 其他任何东西都是自定义值,应该这样对待。不同提供者之间的值名称重叠的可能性非常低。可以存储为字符串数组。
于 2020-03-21T22:32:16.767 回答