我需要为 OAuth2 服务器到服务器的通信存储哪些数据?
What data do I need to store for OAuth2 server-to-server communication?
背景
我的应用程序正在从许多不同的来源 (API) 获取数据并在它们之间进行聚合。所以用户通过 OAuth2 登录到源一次,然后我不断地调用源。
我正在使用 thephpleague/oauth2-client
连接到不同的服务,我还使用构建在顶部的提供程序包连接到不同的网站。我完全没有问题。
一旦我进行身份验证,我就会得到一个 League\OAuth2\Client\Token\AccessToken
实例。
现状
现在为了存储,我在 AccessToken
实例上执行 json_encode
并存储生成的非结构化 string
。要加载它,我 json_decode
并通过构造函数创建一个新实例。不是很有趣。
问题
如果我想以结构化方式存储访问令牌(通常是 OAuth 响应),我需要哪些数据?对于服务器到服务器的通信,我需要坚持什么?具体项目及其类型?我正在尝试找出用于存储许多不同提供程序的数据模型。
#来源
答案的来源有 2 倍:
- 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
。
- 提到的库: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
可以为 null
token_type
隐含在所使用的库中,在这种情况下不是必需的,但可能对其他人来说是必需的。
expires_in
应存储为某个时间点的某种表示形式。
resource_owner_id
是您的图书馆可以使用的自定义值名称。如果要使用它,请将其存储为字符串。
如果您的应用程序在 API 请求之前测试范围授权,scope
可能有助于存储。将其存储为字符串。
- 其他任何东西都是自定义值,应该这样对待。不同提供者之间的值名称重叠的可能性很小。可以存储为字符串数组。
背景
我的应用程序正在从许多不同的来源 (API) 获取数据并在它们之间进行聚合。所以用户通过 OAuth2 登录到源一次,然后我不断地调用源。
我正在使用 thephpleague/oauth2-client
连接到不同的服务,我还使用构建在顶部的提供程序包连接到不同的网站。我完全没有问题。
一旦我进行身份验证,我就会得到一个 League\OAuth2\Client\Token\AccessToken
实例。
现状
现在为了存储,我在 AccessToken
实例上执行 json_encode
并存储生成的非结构化 string
。要加载它,我 json_decode
并通过构造函数创建一个新实例。不是很有趣。
问题
如果我想以结构化方式存储访问令牌(通常是 OAuth 响应),我需要哪些数据?对于服务器到服务器的通信,我需要坚持什么?具体项目及其类型?我正在尝试找出用于存储许多不同提供程序的数据模型。
#来源 答案的来源有 2 倍:
- 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
。
- 提到的库: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
可以为 nulltoken_type
隐含在所使用的库中,在这种情况下不是必需的,但可能对其他人来说是必需的。expires_in
应存储为某个时间点的某种表示形式。resource_owner_id
是您的图书馆可以使用的自定义值名称。如果要使用它,请将其存储为字符串。
如果您的应用程序在 API 请求之前测试范围授权,scope
可能有助于存储。将其存储为字符串。- 其他任何东西都是自定义值,应该这样对待。不同提供者之间的值名称重叠的可能性很小。可以存储为字符串数组。