Coldfusion, недопустимая подпись oauth_signature - PullRequest
3 голосов
/ 06 апреля 2011

Я пытаюсь получить учетные данные из сети ning с помощью Coldfusion 9, поэтому сначала это синтаксис curl для проверки API:

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"} 

Кто-нибудь имеет представление о том, что может быть эта ошибка ??

URL и информация для входа в систему реальны для тех, кто хочет помочь, протестировав

Спасибо ..

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Не разглашайте свое имя пользователя и пароль на публичных форумах.Лучше изменить имя пользователя и пароль после завершения этой проблемы:)

Ваша oauth_signature - 36da2ea8-10fb-48cc-aaa4-c17c551c6b87 &, а не "36da2ea8-10fb-48cc-aaa4-c17c551c6b87 * 1004"

Я получил ответ об успехе, и он отлично работает.

<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 голос
/ 06 апреля 2011

Есть какая-то конкретная причина, почему вы используете cURL вместо cfhttp? На RIAForge есть хорошая библиотека: OAuth это поможет вам иметь дело с OAuth. Возможно, проблема связана с кодировкой параметров.

О - и вы не должны публиковать свои учетные данные OAuth.


UPDATE:

Боюсь, использование OAuth не так просто, как просто вызов cfhttp с params. Параметры должны быть в определенном порядке, вам нужно подписать весь запрос, используя соответствующий метод (простой текст в вашем случае). Процесс подписания также включает отметку времени, поэтому вы не можете проверить свой код со значениями из примера, поскольку они определенно не будут работать.

Если вы загрузите библиотеки 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"/>

Конечно, до и после него пропущено много битов.

0 голосов
/ 06 апреля 2011

Вы можете проверить блог Бена Наделя пост на OAuth . Он рассказывает о некоторых вещах, с которыми вы можете столкнуться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...