OAuth 2.0 重定向 URL 中是否支持查询字符串参数?

Ben*_*ter 4 oauth-2.0

我想确保我正确理解了(草案)规范,其中指出:

重定向端点 URI 必须是
[RFC3986] 第 4.3 节定义的绝对 URI 。端点 URI 可以包含一个
“application/x-www-form-urlencoded”格式
([W3C.REC-html401-19991224])查询组件([RFC3986] 第 3.4 节),在添加附加查询参数时必须保留该组件。的
端点URI必须不包括一个片段组成。

我问的原因是 Google 或 Facebook 似乎都没有保留任何查询字符串。

Dan*_*sen 6

重新阅读规范,似乎规范的引用部分不适用于 OAuth 服务器对 URI 的处理,但适用于 OAuth 客户端对给定的原始端点 URI 的处理。

换句话说,如果我说在重定向到我的服务器进行 OAuth 授权时必须使用的 OAuth 端点是:

http://example.com/oauth.php?endpoint=token
Run Code Online (Sandbox Code Playgroud)

然后,当客户端将?response_type=code&client_id=...&state=...&redirect_uri=...URI添加到 URI 时,不允许丢弃原始端点 uri 中的“?endpoint=token”,并且必须使用 URI:

http://example.com/oauth.php?endpoint=token&response_type=code&client_id=...&state=...&redirect_uri=...
Run Code Online (Sandbox Code Playgroud)

因此,至少就规范的那部分而言,没有任何内容表明 Facebook、Google 等...必须保留除“状态”参数之外的任何未知查询参数。

从技术上讲,您可以使用该&state=参数以 JSON 格式传递自定义数据。虽然这可能会也可能不会。IIRC 我注意到当您使用特殊字符时,Meetup 的 OAuth 2 实现似乎会破坏状态。我认为是违反规范的。