在没有第三方库的情况下设置 Twitter OAuth
本文关键字:情况下 设置 Twitter OAuth 第三方 | 更新日期: 2023-09-27 18:34:54
Get Twitter public timeline, json+C#, no 3rd party libraries 的延续
我仍然是 C# 和 oAuth 的新手,所以如果我不明白任何事情,请耐心等待
我创建了一个名为 oAuthClass 的 C# 类,这些是我当前拥有的变量:
static class oAuthClass
{
public static void run()
{
int oauth_timestamp = GetTimestamp(DateTime.Now);
string oauth_nonce = PseudoRandomStringUsingGUID();
string oauth_consumer_key = "consumer key here";
string oauth_signature_method = "HMAC-SHA1";
string oauth_version = "1.0";
}
}
我已经阅读了OAuth签名,我现在选择使用HMAC-SHA1,我不知道如何生成签名,在阅读和看到HTTP编码和基本字符串之类的东西后,我也非常困惑(我根本不知道它们是什么意思(,但我的猜测是创建一个"Http编码"的URL,例如space->"%20"?
总结:-什么是基弦?
-我在空格->%20 示例中是否正确?
-HMAC-SHA1 涉及一条消息和一个密钥,该消息是消费者秘密吗?那么消费者密钥是密钥吗?
-如何使用HMAC-SHA1算法创建签名
-如果我设法创建了签名,如何将这些值传递给Twitter?
我可以使用
http://example.com?consumer_key=asdf&oauth_signature=signaturevalue&etc.,
但是我已经阅读并且人们使用HTTP标头或其他东西(再次,我真的不知道这是什么(
谢谢!同样,不允许使用第三方库:(
简短的方式回答您的问题,因为实现一个完整的OAuth客户端并非易事,需要真正了解OAuth1.0a规范。这不是火箭科学,但它确实需要整理所有的零碎部分。
我将尝试零碎地回答您的问题。
什么是基字符串?
OAuth 中的签名基字符串是这样构建的:
- 从要发送的请求的 HTTP 方法开始,大写。例如
POST
或GET
。 - 添加与号 (
&
( 字符 - 在请求中添加要调用的 URL 编码(编码百分比(URL(此处不包含参数(
- 在此处添加另一个与号 (
&
( 字符 - 最后添加 URL 编码的参数字符串
我将在最后一步中介绍如何创建所需的参数字符串。
收集请求中包含的所有参数。您可以在 URL 中找到它们作为查询字符串的一部分,也可以在POST
-ing 请求时在请求正文中找到它们。例如,假设您正在POST
将参数parameter1=value1
http://example.com/?parameter2=value2
。这就要包括两个参数。
现在,您还必须汇总协议满意所需的所有OAuth参数。这些将导致参数列表如下所示:
-
oauth_consumer_key=fffffaaaafffaaaff
-
oauth_nonce=aaaaabbbbbcccccaaaaudi2313
-
oauth_signature_method=HMAC-SHA1
-
oauth_timestamp=1319633599
-
oauth_token=bbbbbbbbbfsdfdsdfsfserwerfsddffdsdf
-
oauth_version=1.0
-
parameter1=value1
-
parameter2=value2
所有这些单独的字符串都需要按参数名称按字典顺序排序(按字母顺序应该足够(,并连接成一个字符串。这是您的参数字符串。
我在空格->%20 示例中是否正确?
是的。您正在谈论百分比编码,它也被称为HTTP编码和URL编码。http://en.wikipedia.org/wiki/Percent-encoding。
HMAC-SHA1 涉及一条消息和一个密钥,该消息是消费者的秘密吗?那么消费者密钥是密钥吗?
该消息是您在上面创建的签名基字符串。关键是使用者机密和访问令牌机密的组合。所以键应该看起来像这样:CONSUMER_SECRET&TOKEN_SECRET
(注意与号(。在你做的绝对第一个请求中,你还没有令牌机密,那么密钥只是CONSUMER_SECRET&
(再次注意与号(。
如何使用 HMAC-SHA1 算法创建签名。
我从 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs 中获取了这个,并假定机密和基本字符串可用于代码。
基本上,为HMACSHA1实例提供密钥和消息,呈现该哈希并将其转换为base64字符串。
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(signatureBaseString);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
如果我设法创建了签名,如何将这些值传递给 Twitter?
您应该能够轻松研究HTTP标头是什么。
但是你可以选择将参数和签名的最终结果添加到 URL 中,我认为 Twitter 甚至在某些请求的请求正文中接受它们。但首选方法是通过 Authorization
HTTP 标头,因为它允许在特定于协议的参数和特定于请求的参数之间明确分离。
它应该看起来像这样(直接取自OAuth 1.0a规范(:
Authorization: OAuth realm="Example",
oauth_consumer_key="0685bd9184jfhq22",
oauth_token="ad180jjd733klru7",
oauth_signature_method="HMAC-SHA1",
oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
oauth_timestamp="137131200",
oauth_nonce="4572616e48616d6d65724c61686176",
oauth_version="1.0"
如果你真的很困惑,只想使用一个简单的库,我建议你看看Twitterizer
有文档有示例,设置起来非常容易。
[编辑] 哎呀,对不起,刚刚读到你不是在寻找 3rd 方库。 不好意思