我想确保我正确理解了(草案)规范,其中指出:
重定向端点 URI 必须是[RFC3986] 第 4.3 节定义的绝对 URI 。端点 URI 可以包含一个
“application/x-www-form-urlencoded”格式的
([W3C.REC-html401-19991224])查询组件([RFC3986] 第 3.4 节),在添加额外的查询参数时必须保留它。
端点 URI 不得包含片段组件。
我问的原因是谷歌或 Facebook 似乎都没有保留任何查询字符串。
我想确保我正确理解了(草案)规范,其中指出:
重定向端点 URI 必须是[RFC3986] 第 4.3 节定义的绝对 URI 。端点 URI 可以包含一个
“application/x-www-form-urlencoded”格式的
([W3C.REC-html401-19991224])查询组件([RFC3986] 第 3.4 节),在添加额外的查询参数时必须保留它。
端点 URI 不得包含片段组件。
我问的原因是谷歌或 Facebook 似乎都没有保留任何查询字符串。
重新阅读规范,规范的引用部分似乎不适用于 OAuth 服务器对 URI 的处理,而是 OAuth 客户端对给出的原始端点 URI 的处理。
换句话说,如果我说我在重定向到我的服务器以进行 OAuth 授权时必须使用的 OAuth 端点是:
http://example.com/oauth.php?endpoint=token
然后,当客户端将 URI 添加?response_type=code&client_id=...&state=...&redirect_uri=...
到 URI 时,不允许丢弃原始端点 uri 中的“?endpoint=token”,并且必须使用 URI:
http://example.com/oauth.php?endpoint=token&response_type=code&client_id=...&state=...&redirect_uri=...
因此,至少就规范的那一部分而言,没有任何内容表明 Facebook、Google 等……除了“状态”之外,还必须保留任何未知的查询参数。
从技术上讲,您也许可以使用该&state=
参数以 JSON 格式传递自定义数据。虽然这可能会也可能不会。IIRC 我注意到当您使用特殊字符时,Meetup 的 OAuth 2 实现似乎会破坏状态。我认为有些东西是违反规范的。