我正忙着在iOS上实现反向身份验证。我是在this example和twitter documentation的基础上制作的。
我正在试图弄清楚消费者秘密是否必须从文档执行STEP 1(获取特殊请求令牌)。文档说:
作为示例,请考虑使用使用者密钥JP3PyvG67rXRsnayOJOcQ和consmer secret ydC2yUbFaScSlykO0PmrMjXFeLraSi3Q2HfTOlGxQM签署以下值的请求。
似乎需要秘密。但随后它列出了请求的参数:
oauth_consumer_key JP3PyvG67rXRsnayOJOcQ
oauth_nonce 1B7D865D-9E15-4ADD-8165-EF90D7A7D3D2
oauth_signature_method HMAC-SHA1
oauth_timestamp 1322697052
oauth_version 1.0
x_auth_mode reverse_auth
并且没有秘密。而且没有oath_signature
。然后通过以下方式证实了我的怀疑:
这些参数应该产生如下所示的签名基本字符串:
POST&安培; HTTPS%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&安培;
oauth_consumer_key%3DJP3PyvG67rXRsnayOJOcQ%26
oauth_nonce%3D1B7D865D-9E15-4ADD-8165-EF90D7A7D3D2%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D1322697052%26
oauth_version%3D1.0%26
x_auth_mode%3Dreverse_auth
再次,没有秘密,也没有oath_signature
参数。然后我看看我从GitHub中获取的示例应用程序,看到它实际上利用了这个秘密。它产生了一些魔力,将秘密与不同的字符串混合,对其进行加密并使其成为oauth_signature
参数,该参数进入其请求的授权标头。完整的授权标题如下所示:
的OAuth oauth_timestamp = “1405695110”,oauth_nonce = “0C38A128-42B1-41D1-B31D-EBEBE8971470”,oauth_version = “1.0”,oauth_consumer_key = “u97hVQZtAcRbLWHv5CkONbaJ8”,oauth_signature_method = “HMAC-SHA1”,oauth_signature =“iuaqaN1MvFHyKMa95LFWXCxUfDM%3D “
这个和Twitter doc的例子之间的唯一区别是,这里有oauth_signature
参数(由秘密制作)。这个例子可以正常工作。我在签名时尝试删除这个秘密并从Twitter收到错误。
所以我很困惑。文档没有明确说明秘密是必需的,而示例则将其作为其重要部分。这是强制性的吗?如果没有,请你解释如何在没有秘密的情况下建立请求?