【问题标题】:What data do I need to store for OAuth2 server-to-server communication?我需要为 OAuth2 服务器到服务器的通信存储哪些数据?
【发布时间】:2020-03-22 06:32:16
【问题描述】:

背景

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

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

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

现状

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

问题

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

【问题讨论】:

    标签: php oauth-2.0 thephpleague


    【解决方案1】:

    #来源 答案的来源是 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 的可选值
    • 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 的可选值,回退到 expires 作为伪类型 int 的值

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

    #含义

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

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2011-11-04
      • 1970-01-01
      • 2016-04-19
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多