Coldfusion,oauth_signature无效

时间:2011-04-06 14:54:33

标签: coldfusion oauth

我正在尝试使用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"} 

有人知道这可能是什么错误吗?

网址和登录信息对于想要通过测试提供帮助的人来说是真实的

谢谢..

3 个答案:

答案 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。他介绍了一些你可能遇到的事情。