我想确保我已正确理解(草案)规范,其中规定:
重定向端点URI必须是由
定义的绝对URI [RFC3986]第4.3节。端点URI可以包括
“application / x-www-form-urlencoded”格式化 ([W3C.REC-html401-19991224])查询组件([RFC3986]第3.4节), 添加其他查询参数时必须保留。该
端点URI绝不能包含片段组件。
我问的原因是Google或Facebook似乎都没有保留任何查询字符串。
答案 0 :(得分:4)
重新阅读规范似乎规范的引用部分不适用于OAuth服务器对URI的处理,而是OAuth客户端对原始端点URI的处理。
换句话说,如果我说在重定向到我的服务器进行OAuth授权时必须使用的OAuth端点是:
http://example.com/oauth.php?endpoint=token
然后当客户端将?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实现似乎会破坏状态。我相信的东西是反对规范的。