我正在尝试使用Coldfusion 9从ning网络获取凭据,所以首先这是测试api的curl语法:
curl -k https://external.ningapis.com/xn/rest/mbdevsite/1.0/Token?xn_pretty=true -u devshare@megabase.tn:mbdev2011 -d "oauth_signature_method=PLAINTEXT&
oauth_consumer_key=741ab68b-63fb-4949-891c-9e88f5143034&oauth_signature=36da2ea8
-10fb-48cc-aaa4-c17c551c6b87%26"
然后它返回:
{
"success" : true,
"entry" : {
"author" : "1o0butfek0b3p",
"oauthConsumerKey" : "741ab68b-63fb-4949-891c-9e88f5143034",
"oauthToken" : "46f1e137-549a-4d9d-ae05-62782debfd3d",
"oauthTokenSecret" : "9f778ab5-db8e-4f3e-b17f-61d249b91f0a"
},
"resources" : {
}
然后我将它翻译成coldfusion:
<cfhttp
method="post"
url="https://external.ningapis.com/xn/rest/mbdevsite/1.0/Token"
username="devshare@megabase.tn"
password="mbdev2011">
<cfhttpparam type="header" name="content-type" value="application/x-www-form-urlencoded">
<cfhttpparam name="oauth_signature_method" type="FormField" value="PLAINTEXT"/>
<cfhttpparam name="oauth_consumer_key" type="FormField" value="741ab68b-63fb-4949-891c-9e88f5143034"/>
<cfhttpparam name="oauth_signature" type="FormField" value="36da2ea8-10fb-48cc-aaa4-c17c551c6b87%26"/>
</cfhttp>
<cfoutput>
#cfhttp.fileContent#
</cfoutput>
并且响应总是:
{"success":false,"reason":"The oauth_signature is invalid. That is, it doesn't match the signature computed by the Service Provider.","status":401,"code":1,"subcode":12,"trace":"3d874587-072b-4877-b27e-b84ee2e2b537"}
有人知道这可能是什么错误吗?
网址和登录信息对于想要通过测试提供帮助的人来说是真实的
谢谢..
答案 0 :(得分:2)
不要透露您的用户名和&amp;公共论坛中的密码。更好的是你改变这个用户名和&amp;此问题完成后的密码:)
您的oauth_signature为36da2ea8-10fb-48cc-aaa4-c17c551c6b87 &
而非“36da2ea8-10fb-48cc-aaa4-c17c551c6b87 %26
”
我得到了成功回应&amp;它工作得很好。
<cfhttp
method="post"
url="https://external.ningapis.com/xn/rest/mbdevsite/1.0/Token"
username="devshare@megabase.tn"
password="mbdev2011">
<cfhttpparam type="header" name="content-type" value="application/x-www-form-urlencoded">
<cfhttpparam name="oauth_signature_method" type="FormField" value="PLAINTEXT"/>
<cfhttpparam name="oauth_consumer_key" type="FormField" value="741ab68b-63fb-4949-891c-9e88f5143034"/>
<cfhttpparam name="oauth_signature" type="FormField" value="36da2ea8-10fb-48cc-aaa4-c17c551c6b87&"/>
</cfhttp>
答案 1 :(得分:1)
您使用cURL而不是cfhttp的任何具体原因? RIAForge上有一个不错的图书馆: OAuth 这将有助于您处理OAuth。问题可能在于参数编码。
哦 - 你不应该发布你的OAuth证书。
更新:
我担心使用OAuth并不像使用params调用cfhttp那么简单。 参数需要按特定顺序排列,您需要使用适当的方法(在您的情况下为纯文本)对整个请求进行签名。签名过程还包括时间戳,因此您无法使用示例中的值测试代码,因为它们肯定不起作用。
如果您下载RIAForge库,那里有一个“\ examples_external”文件夹和twitter.cfm - 您将找到我在那里提到的所有内容。
从那里得到一些代码来表明我的意思:
<!--- Create empty token --->
<cfset oReq = CreateObject("component", "oauth.oauthrequest").fromConsumerAndToken(
oConsumer = oConsumer,
oToken = oToken,
sHttpMethod = "GET",
sHttpURL = sTokenEndpoint,stparameters= Parameters )>
<!--- Sign the request --->
<cfset oReq.signRequest(
oSignatureMethod = oReqSigMethodSHA,
oConsumer = oConsumer,
oToken = oToken)>
<!--- Get the request token --->
<cfhttp url="#oREQ.getString()#" method="get" result="tokenResponse"/>
当然,之前和之后都有很多缺失。
答案 2 :(得分:0)
你可以查看Ben Nadel的博客post on OAuth。他介绍了一些你可能遇到的事情。