【问题标题】:Issue with OAuth and Flickr - cannot request tokenOAuth 和 Flickr 的问题 - 无法请求令牌
【发布时间】:2012-09-03 05:01:02
【问题描述】:

我目前正在尝试从 Flickr 请求一个令牌,以便能够对其 OAuth 方法进行一些调用。我知道我一定做错了什么,因为我得到了签名错误的答复,但老实说,我遵循了他们的指示(http://www.flickr.com/services/api/auth.oauth.html,http://www.flickr.com/services/api/auth.oauth.html#request_token , http://www.flickr.com/services/api/flickr.auth.oauth.getAccessToken.html) 但我仍然收到错误:

oauth_problem=signature_invalid&debug_sbs=GET&http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Frequest_token&oauth_callback%3D%26oauth_consumer_key%3Da0f20d2c9b0a142848cffdf9d9a5ad78%26oauth_nonce%3DFCBB713F-581E-4BC6-42FF-C50252D839EC%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1330450158%26oauth_version%3D1.0

我不知道如何创建该签名,也不知道如何将其放入请求中,有人能指出我正确的方向吗?谢谢!

我目前正在使用 AS3,下面是我的代码:

// request params
var now:Date = new Date();
var requestParams:Object = {};
requestParams.oauth_callback = "";  // there is no callback, it's a desktop application
requestParams.oauth_consumer_key = API_KEY;
requestParams.oauth_nonce = UIDUtil.getUID(now);
requestParams.oauth_timestamp = String(now.time).substring(0, 10);
requestParams.oauth_signature_method = "HMAC-SHA1";
requestParams.oauth_version = "1.0";


// create an array to sort param names alphabetically
// mandatory to create signature 
var sortedRequestParamNames:Array = [];
var name:String;
for(name in requestParams)
{
    sortedRequestParamNames.push(name);
}
sortedRequestParamNames.sort();


// create signature
// see http://www.flickr.com/services/api/auth.spec.html#signing
var oauthSignature:String = API_SECRET;
var i:uint;
var numParams:uint = sortedRequestParamNames.length;
var paramName:String;
for(i = 0; i < numParams; i++)
{
    paramName = sortedRequestParamNames[i];
    oauthSignature += paramName + convertToPercentEntities(requestParams[paramName]);
}
oauthSignature = MD5.hash(oauthSignature);


// build request
var tokenRequestString:String = REQUEST_TOKEN_URL;
for(i = 0; i < numParams; i++)
{
    paramName = sortedRequestParamNames[i];
    tokenRequestString += (i == 0) ? "?" : "&";
    tokenRequestString += paramName + "=" + requestParams[paramName];
}
tokenRequestString += "&oauth_signature=" + oauthSignature;


var tokenRequest:URLRequest = new URLRequest(tokenRequestString);
tokenRequest.method = URLRequestMethod.GET;


// load request
initLoader();
_loader.addEventListener(Event.COMPLETE, requestTokenLoadedHandler);
_loader.load(tokenRequest);

【问题讨论】:

    标签: actionscript-3 url oauth flickr


    【解决方案1】:

    基本上,您需要使用 HMAC-SHA1 算法而不是 MD5。我会引导你完成它。

    1.创建签名基字符串

    您似乎正在这样做(但您将其直接分配给签名变量)。通过连接三个不同的部分来编译基本字符串。

    1. 将 HTTP 方法转换为大写,并将基本字符串设置为等于该值。示例:GET
    2. 将“&”字符附加到基本字符串。
    3. 百分比编码 URL(不带参数)并将其附加到基本字符串。示例:http%3A%2F%2Fexample.com%2Frequest
    4. 将“&”字符附加到基本字符串。
    5. 对已排序的参数字符串进行百分比编码并将其附加到基本字符串。

    最终应该是这样的:

    GET&http%3A%2F%2Fexample.com%2Frequest&a2%3Dr%2520b%26a3%3D2%2520q %26a3%3Da%26b5%3D%253D%25253D%26c%2540%3D%26c2%3D%26oauth_consumer_ key%3D9djdj82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_m ethod%3DHMAC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk 9d7dh3k39sj

    现在您已经完成了签名基本字符串。让我们继续

    2。找出您的签名密钥。

    您的签名密钥采用以下格式:CONSUMER_SECRET + "&amp;" + TOKEN_SECRET。但是由于您还没有令牌,因此签名密钥是消费者机密和 & 符号。像这样:CONSUMER_SECRET + "&amp;"

    对于所有请求,但第一个请求除外,您将拥有一个令牌,无论是请求令牌还是访问令牌。

    3.使用 HMAC-SHA1 算法组合密钥和基本字符串。

    我在使用 AS3 签名时使用了http://code.google.com/p/as3crypto/。你甚至可以在这个演示页面上测试它的 HMAC-SHA1 算法:http://crypto.hurlant.com/demo/

    使用基本字符串作为输入,使用签名密钥作为 HMAC-SHA1 算法的密钥。

    HMAC-SHA1 算法的输出将是一个二进制字符串,需要对其进行 base64 编码以生成最终签名。它应该看起来像这样:

    NYIQGEwIomgCuVOIA28pMDMID78=

    这应该与请求一起作为oauth_signature 参数发送。

    【讨论】:

    • 这个回复对我帮助很大。我只是根据语言添加 HMAC-SHA1 转换必须以 BINARY 输出,而不是在 base64 编码之前的十六进制。
    【解决方案2】:

    我也遇到了问题,最终使用了 FlickrNet API。

    http://flickrnet.codeplex.com/

    【讨论】:

    • flickrnet 对我来说完全是个谜。我无法弄清楚用于获取身份验证令牌的验证器参数。我正在使用 WPF,所以回调 url 看起来很奇怪......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2013-10-07
    • 2011-09-19
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多