OAuth1.0 签名是如何生成的
How a OAuth1.0 Signature is generated
我必须使用 OAuth1.0
授权请求。
在响应 header 中,它需要访问令牌、OAuth Nonce、时间戳和 OAuthSignature.I 编写了创建 Timestamp
和 OAuthNonce
的方法
如何使用这些参数生成 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()));
}
我找到了创建 Oauth 1.0 的方法 signture.It 要求 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() 是一种扩展方法,用于将排序字典转换为 Web 字符串并编码特殊 characters.After 创建签名,这可以包含在 Http 请求的授权 header 中连同其他 header 参数即。随机数、时间戳、访问令牌等
我必须使用 OAuth1.0
授权请求。
在响应 header 中,它需要访问令牌、OAuth Nonce、时间戳和 OAuthSignature.I 编写了创建 Timestamp
和 OAuthNonce
的方法
如何使用这些参数生成 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()));
}
我找到了创建 Oauth 1.0 的方法 signture.It 要求 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() 是一种扩展方法,用于将排序字典转换为 Web 字符串并编码特殊 characters.After 创建签名,这可以包含在 Http 请求的授权 header 中连同其他 header 参数即。随机数、时间戳、访问令牌等