如何生成OAuth1.0签名

时间:2019-03-29 12:03:58

标签: oauth authorization asp.net-authorization oauth-1.0a

我必须使用OAuth1.0授权请求。 在响应标头中,它需要访问令牌,OAuth Nonce,Timestamp和OAuthSignature。我编写了创建TimestampOAuthNonce的方法 使用这些参数如何生成OAuthsignature?它使用HMAC-SHA1方法哈希签名。 如何创建用于生成OAuth签名密钥的方法。有人可以建议使用这些参数创建签名的方法吗?预先感谢。

private static string CreateOAuthTimestamp()
        {
            var nowUtc = DateTime.UtcNow;
            var timeSpan = nowUtc - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            var timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
            return timestamp;
        }

 private string CreateOauthNonce()
        {
            return Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
        }

1 个答案:

答案 0 :(得分:0)

我找到了创建Oauth 1.0签名的方法,它要求将api请求的所有参数都用SHA1算法进行哈希处理。

private string CreateOauthSignature
       (string resourceUrl, string oauthNonce, string oauthTimestamp , 
SortedDictionary<string, string> requestParameters)
    {
        //Add the standard oauth parameters to the sorted list        
        requestParameters.Add("oauth_consumer_key", consumerKey);
        requestParameters.Add("oauth_nonce", oauthNonce);
        requestParameters.Add("oauth_signature_method", OauthSignatureMethod);
        requestParameters.Add("oauth_timestamp", oauthTimestamp);
        requestParameters.Add("oauth_token", accessToken);
        requestParameters.Add("oauth_version", OauthVersion);

        var sigBaseString = requestParameters.ToWebString();

        var signatureBaseString = string.Concat
        ("GET", "&", Uri.EscapeDataString(resourceUrl), "&",
                            Uri.EscapeDataString(sigBaseString.ToString()));

        //Using this base string, encrypt the data using a composite of the 
        //secret keys and the HMAC-SHA1 algorithm.
        var compositeKey = string.Concat(Uri.EscapeDataString(consumerKeySecret), "&",
                                         Uri.EscapeDataString(accessTokenSecret));

        string oauthSignature;
        using (var hasher = new HMACSHA1(Encoding.ASCII.GetBytes(compositeKey)))
        {
            oauthSignature = Convert.ToBase64String(
                hasher.ComputeHash(Encoding.ASCII.GetBytes(signatureBaseString)));
        }
        return oauthSignature;
    }  

ToWebstring()是一种扩展方法,用于将Sorted字典转换为Web字符串并对特殊字符进行编码。创建签名后,可以将其与其他标头参数viz一起包含在Http请求的授权标头中。随机数,时间戳,访问令牌等