我正在实施一个 Oauth Api 并且发现有一些我无法验证的事情,如果有人可以提供澄清,我会很高兴。警告我可能会漫无目的,所以我会尝试用粗体标记我的问题。
根据 oauth 1.0 规范https://www.rfc-editor.org/rfc/rfc5849,我相信 oauth 参数对签名进行百分比编码的方式与在线时不同。第 3.6 节https://www.rfc-editor.org/rfc/rfc5849#section-3.6 “它仅用于构建签名基本字符串和“授权”标头字段。”
RFC3986 https://www.rfc-editor.org/rfc/rfc3986 这似乎是正常请求中使用的百分比编码方案。但是我没有看到它给出任何类型的 'this' 映射到 'that' 所以我假设如果字符在保留列表中,则应该使用十六进制等效项。
' '(空格)在为签名编码时是 %20 的唯一区别吗?Oauth 规范参考了这一点,但我无法诚实地找到其他规范中定义的位置。如果有人能指出我提到的地方以及我可能如何误解它,那就太棒了。
其他空白字符应该是 %20 吗?规范中的什么地方提到了这一点?
传统的 UrlEncode 是否适用于表单正文和查询参数?
最后,我有一些我希望验证的示例输出。我试图展示 Oauth 签名编码字符和 Url 编码字符之间的区别。再一次,唯一的区别似乎是对 ''、'*' 和 '~' 的处理
Char Oauth Url
* %2A *
~ ~ %7E
% %25 %25
! %21 %21
: %3A %3A
/ %2F %2F
= %3D %3D
& %26 %26
+ %2B %2B
%20 +
, %2C %2C
@ %40 %40
\r\n %0D%0A %0D%0A
\n %0A %0A
\r %0D %0D
" %22 %22
? %3F %3F
( %28 %28
) %29 %29
| %7C %7C
[ %5B %5B
] %5D %5D