首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对Last.fm接口的请求进行可靠的签名?

如何对Last.fm接口的请求进行可靠的签名?
EN

Stack Overflow用户
提问于 2010-05-09 10:38:07
回答 1查看 1.1K关注 0票数 6

我正在尝试通过Last.fm实现授权。我将我的论点作为字典提交,以使签名更容易。这是我用来签署我的呼叫的代码:

代码语言:javascript
代码运行次数:0
运行
复制
public static string SignCall(Dictionary<string, string> args)
{
    IOrderedEnumerable<KeyValuePair<string, string>> sortedArgs = args.OrderBy(arg => arg.Key);
    string signature = 
        sortedArgs.Select(pair => pair.Key + pair.Value).
        Aggregate((first, second) => first + second);
    return MD5(signature + SecretKey);
}

我已经检查了调试器中的输出,它确实应该是这样的,但是,我每次尝试都会得到WebExceptions,这意味着API返回“无效的方法签名”。这意味着它不接受SignCall生成的签名。

下面是我用来生成URL的代码,以防万一它会有帮助:

代码语言:javascript
代码运行次数:0
运行
复制
public static string GetSignedURI(Dictionary<string, string> args, bool get)
{
    var stringBuilder = new StringBuilder();
    if (get)
        stringBuilder.Append("http://ws.audioscrobbler.com/2.0/?");
    foreach (var kvp in args)
        stringBuilder.AppendFormat("{0}={1}&", kvp.Key, kvp.Value);
    stringBuilder.Append("api_sig="+SignCall(args));
    return stringBuilder.ToString();
}

以及获取SessionKey的示例用法:

代码语言:javascript
代码运行次数:0
运行
复制
var args = new Dictionary<string, string>
                       {
                           {"method", "auth.getSession"},
                           {"api_key", ApiKey},
                           {"token", token}
                       };
string url = GetSignedURI(args, true);

编辑:

哦,代码引用了一个实现如下的MD5函数:

代码语言:javascript
代码运行次数:0
运行
复制
public static string MD5(string toHash)
{
    byte[] textBytes = Encoding.UTF8.GetBytes(toHash);
    var cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] hash = cryptHandler.ComputeHash(textBytes);
    return hash.Aggregate("", (current, a) => current + a.ToString("x2"));
}

此外,下面是API - Last.fm文档,其中包含详细说明授权的this page

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-09 21:20:52

你的代码对我来说工作得很好。我做了什么:

获取令牌: URL,返回的令牌为53c8890afbbf94281931cd11bf28a4e0

  • Use您的代码以获取,然后使用返回用户名和会话密钥的WebClient下载其内容。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2796422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档