Ala*_*sam 7 api coldfusion oauth tumblr
我意识到这不是什么新鲜事,并且已经有很多关于这个主题的帖子.然而,非与我正在寻找的东西完全相关......所以,它在这里:
我已经回顾了关于这个主题的其他帖子,似乎没有什么对我有用.以下是我正在做的事情的快速摘要:
***我已经这么久了,以至于我忘记了我的位置 - 我刚刚意识到我的oauth_signature现在在我的授权标题中丢失了.我知道它之前有...
顺便说一句 - 我正在使用Harry Klein的CF oauth应用程序(http://oauth.riaforge.org/):
<!--- 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#" />
Run Code Online (Sandbox Code Playgroud)
以下是我所得到的一些内容(我添加了换行符以使其更清晰):
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"
Run Code Online (Sandbox Code Playgroud)
每当我尝试修改任何东西时,它都无法运行.我总是得到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"
Run Code Online (Sandbox Code Playgroud)
验证:1.OAuth_token是正确的.2. oAuth标题按字母顺序排序.3.签名基本字符串不包含任何参数,因为没有参数.方法就是搞定.5. OAuth标头包含oauth_signature.
一些问题是:1.是否还需要包含任何其他标题(不确定CF是否自动添加任何标题)2.任何人都可以验证我的签名基本字符串吗?3.签名基本字符串中是否存在区分大小写问题?(或其他任何地方)
编辑 - 1/27/2013 任何人都可以请确认此信息(我使用的是真值,因为包含应用程序本身后所有内容都将重置):
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"
Run Code Online (Sandbox Code Playgroud)
我希望有人能证实这是对的.在后一种情况下,我会稍微调整一下,希望再次检查.在此先感谢所有人.
我没有专门使用过 Tumblr API,但对您的问题有一些想法。
你没有说你到底想做什么。您已成功收到访问令牌吗?或者您正在尝试使用请求令牌来获取用户信息?- 这是行不通的。
oauth_verifier 仅在获取访问令牌的过程中需要 - 而不是在使用普通 API 功能(例如获取用户信息)时。
在我看来,您似乎正在尝试使用请求令牌来访问用户信息,并且还不必要地将 oauth_verifier 添加到网址中。您可能需要阅读 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#">
Run Code Online (Sandbox Code Playgroud)
您可以查看 OAuth 库存档中的其他示例。
希望这可以帮助。
归档时间: |
|
查看次数: |
1175 次 |
最近记录: |