7

これは新しいことではなく、このトピックに関する投稿がすでにたくさんあることを認識しています. ただし、私が探しているものと正確に関連しているものはありません... SO、ここにあります:

このトピックに関する他のすべての投稿を確認しましたが、何もうまくいかないようです。ここに私がやっていることの簡単な要約があります:

***私はあまりにも長い間これを行ってきたので、自分がどこにいるのか見失っています。自分の oauth_signature が認証ヘッダーから欠落していることに気付きました。前からあったのは知ってる…

ところで-私は Harry Klein ( http://oauth.riaforge.org/ ) の CF oauth アプリを使用しています:

<!--- set up the parameters --->
<cfset sConsumerKey = 'xxx'> <!--- Got these from Tumblr for my app --->
<cfset sConsumerSecret = 'xxx'> <!--- Got these from Tumblr for my app --->     
<cfset OAUTH_VERIFIER = 'xxx' /> <!--- Got these when doing oauth registration with tumblr for account --->
<cfset token = 'xxx' /> <!--- Got these when doing oauth registration with tumblr for account --->
<cfset tokenSecret = 'xxx' /> <!--- Got these when doing oauth registration with tumblr for account --->

<!--- set up the required objects including signature method--->
<cfset oReqSigMethodSHA = CreateObject("component", "oauth.oauthsignaturemethod_hmac_sha1")>
<cfset oToken = CreateObject("component", "oauth.oauthtoken").init(sKey = token, sSecret = tokenSecret)>
<cfset oConsumer = CreateObject("component", "oauth.oauthconsumer").init(sKey = sConsumerKey, sSecret = sConsumerSecret)>

<cfset oReq = CreateObject("component", "oauth.oauthrequest").fromConsumerAndToken(
    oConsumer = oConsumer,
    oToken = oToken,
    sHttpMethod = "GET",
    sHttpURL = 'http://api.tumblr.com/v2/user/info')> <!--- For now, just trying to get the user info --->
    <!--- The ultimate goal is to post to differnent blog accounts on tumblr --->

<cfset oReq.setParameter('oauth_verifier',oauth_verifier) /> <!--- Had to manually add in oauth_verifier if it is even needed --->

<cfset oReq.signRequest(
    oSignatureMethod = oReqSigMethodSHA,
    oConsumer = oConsumer,
    oToken = oToken)> <!--- Sign the request --->

<cfhttp url="#oReq.GETNORMALIZEDHTTPURL()#" method="get">
    <cfhttpparam type="header" name="authorization" value="#oReq.TOHEADER()#" />
</cfhttp>

<cfdump var="#cfhttp#" />

これが私が得たものの一部です(読みやすくするために改行を追加しました):

SIGNATUREBASESTRING:
    GET&
    http%3A%2F%2Fapi.tumblr.com%2Fv2%2Fuser%2Finfo&
    oauth_consumer_key%3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
    oauth_nonce%3D96A76129198ADF9B60874521D3FB718256B2D093%26
    oauth_timestamp%3D1358463090%26
    oauth_token%3Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
    oauth_verifier%3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%26
    oauth_version%3D1.0 

AUTHORIZATION HEADER:
    OAuth oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    oauth_timestamp="1358463090",
    oauth_version="1.0",
    oauth_nonce="96A76129198ADF9B60874521D3FB718256B2D093",
    oauth_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    oauth_verifier="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 

何かを変更しようとするたびに、うまくいきません。私はいつもTumblrから401 Not Authorizedの応答を受け取りますが、何が間違っているのかについての説明はありません.

私は何日もこれに取り組んできました:助けてください

* 2013 年 1 月 24 日編集**

    1. Getting the access_token:
    response from Tumblr to auth_token request (Success):
    oauth_token=XXX&
    oauth_token_secret=XXX&
    oauth_callback_confirmed=true

    2. Using access token to get user info:
    sConsumerKey:
    xxx

    sConsumerSecret:
    yyy

    EndPoint:
    http://api.tumblr.com/v2/user/info

    COMMETHOD:
    get

    token:
    XXX

    tokenSecret:
    XXX

    Signature base string:
    GET&
    http%3A%2F%2Fapi.tumblr.com%2Fv2%2Fuser%2Finfo&
    oauth_consumer_key%3Dxxx&
    oauth_nonce%3DDED2857752C210C71D81DFD549B7B13113DCA50F&
    oauth_signature_method%3DHMAC-SHA1&
    oauth_timestamp%3D1358993908&
    oauth_token%XXX&
    oauth_version%3D1.0

    Signature:
    emffJ8+2QvExJzRH0fgDM8l3jDQ=

    Authorization Header:
    OAuth oauth_consumer_key="xxx"&
    oauth_nonce="DED2857752C210C71D81DFD549B7B13113DCA50F"&
    oauth_signature="emffJ8%2B2QvExJzRH0fgDM8l3jDQ%3D"&
    oauth_signature_method="HMAC-SHA1"&
    oauth_timestamp="1358993908"&
    oauth_token="XXX"&
    oauth_version="1.0" 

1. OAuth_token が正しい。2. oAuth ヘッダーはアルファベット順にソートされます。3. 署名ベース文字列にはパラメータがないため、パラメータは含まれていません。4. メソッドは get です。5. OAuth ヘッダーには oauth_signature が含まれます。

いくつかの質問があります: 1. 含める必要がある他のヘッダーはありますか (CF が自動的に追加するかどうかは不明です) 2. 誰でも私の署名ベース文字列を確認できますか? 3. 署名のベース文字列に大文字と小文字の区別の問題はありますか? (または他の場所)

編集 - 2013 年 1 月 27 日 誰でもこの情報を確認できますか (アプリ自体を含めた後にすべてがリセットされるため、実際の値を使用しています):

Given:
1. Signature Base String:

GET&
http%3A%2F%2Fapi.tumblr.com%2Fv2%2Fuser%2Finfo&
oauth_consumer_key%XXX%26
oauth_nonce%3DOAUTH7DC9F837D60483B9D10389C9BB0AEAF9%26
oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D1359320053%26
oauth_token%XXX%26
oauth_version%3D1.0

2. Signing Key (consumer secret & auth_token_secret):
XXX&
XXX

Is this signature correct?

3. Signature:
2n+xbj9gbOrADeaQ3nORKNhOTUg=    

Is this Authorization Header correct:

4. Authorization header (FYI- there is a space after each comma- is that ok?
And- is the encoding on the Signature ok?):
(Also, I've tried this in alphabetical order and not- same result)

OAuth oauth_signature="2n%2Bxbj9gbOrADeaQ3nORKNhOTUg%3D", 
oauth_token="XXX", 
oauth_consumer_key="XXX", 
oauth_nonce="OAUTH7DC9F837D60483B9D10389C9BB0AEAF9", 
oauth_signature_method="HMAC-SHA1", 
oauth_timestamp="1359320053", 
oauth_version="1.0"

誰かがこれが正しいかどうかを確認できることを願っています。後者の場合は、少し調整して、できればもう一度確認します。よろしくお願いします。

4

1 に答える 1

1

特にTumblr APIを使用したことはありませんが、問題についていくつかのアイデアがあります.

あなたは正確に何をしようとしているのかを言いませんでした。アクセストークンの取得に成功しましたか? または、リクエストトークンを使用してユーザー情報を取得しようとしていますか? - うまくいきません。

oauth_verifier は、アクセス トークンを取得するプロセスでのみ必要です。通常の API 機能 (ユーザー情報の取得など) を使用する場合は必要ありません。

私には、リクエスト トークンを使用してユーザー情報にアクセスしようとしているように見えます。さらに、不必要に oauth_verifier を URL に追加しているようです。おそらく、OAuth 1.0a フローを読む必要があります。

お役に立てれば。

アップデート:

OAuth 1.0a フローがどのように見えるかを示す図を次に示します。ここに画像の説明を入力

元の図の画像はこちら

更新後の更新

あなたはここhttp://oauth.riaforge.org/からライブラリを使用していると言っていますが、コードには表示されません。繰り返しますが、特に Tumblr API を使用したことはありませんが、前述のライブラリを使用した最も単純な呼び出しは次のようにします。

<cfscript>
    consumerKey = 'xxx';
    consumerSecret = 'yyy';
    accessToken = 'xxxyyy';
    accessSecret = 'yyyxxx';

    //consumber object
    oauthConsumerCFC = CreateObject("component", "OAuth.oauthconsumer");
    oTumblrConsumer = oauthConsumerCFC.init(sKey = consumerKey, sSecret = consumerSecret);

    //token object
    oauthTokenCFC = CreateObject("component", "OAuth.oauthtoken");
    oTumblrAccessToken = oauthTokenCFC.init(sKey = accessToken, sSecret = accessSecret);

    //request object
    oauthRequestCFC = CreateObject("component", "OAuth.oauthrequest");
    oTumblrReqest = oauthRequestCFC.fromConsumerAndToken(
        oConsumer   : oTumblrConsumer,
        oToken      : oTumblrAccessToken,
        sHttpMethod : "GET",
        sHttpURL    : "http://api.tumblr.com/v2/user/info"
    );

    //signature method
    oauthSigMethodSHA = CreateObject("component", "OAuth.oauthsignaturemethod_hmac_sha1")

    //sign request
    oTumblrReqest.signRequest(
        oSignatureMethod    : oauthSigMethodSHA,
        oConsumer           : oTumblrConsumer,
        oToken              : oTumblrAccessToken
    );

    //signed url
    signedURL = oTumblrReqest.getString();
</cfscript>

<cfhttp method="get" url="#signedURL#" result="requestResult" charset="utf-8" redirect="no" />

<cfdump var="#requestResult#">

OAuth ライブラリ アーカイブにある他の例を見ることができます。

お役に立てれば。

于 2013-01-18T08:06:39.153 に答える