- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这里有一些代码,我收到错误 401 未经授权。我已经检查了使用 Twitter 框登录。
public async Task get_Oauth_token_TaskAsync()
{
//variables for action
string oauth_nonce;
string oauth_callback;
string oauth_signature_method;
string oauth_timestamp;
string oauth_consumer_key;
string oauth_signature;
string oauth_version;
string req_url;
//set values to variables
var dt = DateTime.Now;
var ticks = dt.Ticks;
var seconds = ticks / TimeSpan.TicksPerSecond;
oauth_timestamp = seconds.ToString();
oauth_callback = "http://www.localhost:55593/TwitterSync.aspx";
oauth_nonce = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 16).ToString(); //random string
oauth_signature_method = "HMAC-SHA1";
oauth_consumer_key = "xxxx";
oauth_version = "1.0";
req_url = "https://api.twitter.com/oauth/request_token";
oauth_signature = create_auth_Signature_Task(oauth_nonce,oauth_callback,oauth_signature_method,oauth_timestamp,oauth_consumer_key,oauth_version,req_url);
///action
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(req_url);
request.Method = "POST";
request.UserAgent = "themattharris' HTTP Client";
request.Host = "api.twitter.com";
request.Headers.Add(HttpRequestHeader.Authorization, "OAuth oauth_callback = \"" + Uri.EscapeDataString(oauth_callback) + "\"" + ",oauth_consumer_key = \"" + oauth_consumer_key + "\",oauth_nonce = " + "\"" + oauth_nonce + "\", oauth_signature = \"" + oauth_signature + "\", oauth_signature_method = \"HMAC-SHA1\", oauth_timestamp = \"" + oauth_timestamp + "\", oauth_version = \"1.0\"");
WebResponse response = await request.GetResponseAsync();
Stream str = response.GetResponseStream();
StreamReader reader = new StreamReader(str);
dynamic resp = reader.ReadToEndAsync();
}
private string create_auth_Signature_Task(string oauth_nonce, string oauth_callback,
string oauth_signature_method, string oauth_timestamp, string oauth_consumer_key, string oauth_version, string req_url)
{
string oauth_nonce_enc = Uri.EscapeDataString(oauth_nonce);
string oauth_callback_enc = Uri.EscapeDataString(oauth_callback);
string oauth_signature_method_enc = Uri.EscapeDataString(oauth_signature_method);
string oauth_timestamp_enc = Uri.EscapeDataString(oauth_timestamp);
string oauth_consumer_key_enc = Uri.EscapeDataString(oauth_consumer_key);
string oauth_version_enc = Uri.EscapeDataString(oauth_version);
string req_url_enc = Uri.EscapeDataString(req_url);
string secret = "xxxx";
string signature_base = "POST&" + req_url_enc + "&" + Uri.EscapeDataString("oauth_consumer_key=" + oauth_consumer_key_enc + "&oauth_nonce=" + oauth_nonce + "&oauth_signature_method=" + oauth_signature_method_enc + "&oauth_timestamp=" + oauth_timestamp_enc + "&oauth_version=" + oauth_version_enc);
return ShaHash(signature_base, secret);
}
private string ShaHash(string value, string key)
{
using (var hmac = new HMACSHA1(Encoding.UTF32.GetBytes(key)))
{
return ByteToString(hmac.ComputeHash(Encoding.UTF32.GetBytes(value)));
}
}
static string ByteToString(IEnumerable<byte> data)
{
return string.Concat(data.Select(b => b.ToString("x2")));
}
我都是按照这个page做的.现在我迷路了,知道为什么它不起作用吗?
最佳答案
您没有正确计算 oauth_timestamp。这应该计算为 Unix 时间,即自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。
int unixTimestamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
或使用 .NET 4.6
long unixTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
此外,用于创建签名的签名 key 应该是百分比编码的消费者 secret 和百分比编码的 token secret 的串联,由一个符号 (&) 连接。在获取请求 token 的情况下, token secret 尚不清楚,因此您应该只使用消费者 secret ,后跟一个与号 (&)。
var signingKey = oauth_consumer_key_enc + "&";
最后,您应该在计算哈希后返回 Base64 编码的字符串,这样您的函数就变成了:
private string ShaHash(string value, string signingKey)
{
using (var hmac = new HMACSHA1(Encoding.ASCII.GetBytes(signingKey)))
{
return Convert.ToBase64String(hmac.ComputeHash(Encoding.ASCII.GetBytes(value)));
}
}
关于c# - 推特未授权 401 c# oauth/request_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826396/
我刚刚在我的 Linux 主机上编译了 QTweetLib。我已编译并运行 pinauthstatusupdate 示例,没有任何更改。但是当我尝试获取 request_token 时,我得到了: F
我目前正在为 qml 环境使用 javascript 和 OAuth 开发 Twitter 应用程序。我被困在“request_token”端点,我不明白为什么。当我发送我的请求时,我只会收到“无法验
我这里有一些代码,我收到错误 401 未经授权。我已经检查了使用 Twitter 框登录。 public async Task get_Oauth_token_TaskAsync() {
我成功地分别使用了 openID 和 OAuth,但我无法让它们一起工作。 我是不是做错了什么: String userSuppliedString = "https://www.google.com
我正在尝试为我的应用获取 oauth token 。我关注了this tutorial但我收到这样的错误: { "errors": [ { "code": 32,
尝试获取一个时收到http 403响应错误请求 token 。 我已经检查了我的基弦的歌唱过程,这是正确的。如果 我使用 Twitter 开发站点上的默认 key ,它生成相同的他们在网站上列出的结果
我已按照回复帖子 withings api authentication 的步骤中所述设置了所有内容. 但是,当我复制并粘贴在第 2 步(向 URL 发送请求:)中生成的最终 URL 时,我的浏览器没
所以,我在为我的 Angular 应用程序制作 Twitter 登录方法时遇到了问题。问题是我什至无法完成第一步。我需要向 request_token API 发出发布请求(我正在执行此步骤 http
我正在使用以下方法 URI 从 Twitter 请求 token 。 注意:这里的新行仅用于显示目的。 http://twitter.com/oauth/request_token? oauth_co
我正在尝试将 oauth 流程集成到我的应用程序中。 调用 oauth/request_token 端点时收到 401 错误: "message": "401 - {\"errors\":[{\"co
这可能是一个重复的问题,但还没有答案。库 oauth-dot-net 和 DotNetOpenAuth 都非常复杂,一个似乎贯穿 OAuth 的主题,虽然 OAuth with Verificatio
所以我正在尝试从 Twitter 获取 token ,但失败了。我收到以下错误:“无法验证 oauth 签名和 token ”。我读过这可能是由于您的系统时钟错误。在 javascript 中,我使用
我正在尝试在 NodeJS 上使用 OAuth 进行身份验证,但出现此错误: Error getting OAuth request token : { statusCode: 401, data:
我正在尝试在我的 Game Maker 应用程序中使用 Twitter 通过 OAuth 向 Firebase 验证用户(Game Maker 不支持 SDK)。 通过 REST HTTP POST
Twitter 最近刚刚强制执行以下内容: 1) 您必须将 oauth_callback 值传递给 oauth/request_token。这不是可选的。即使您已经在 dev.twitter.com
我正在编写一个简单的 Twitter 登录并尝试获取请求 token 以将用户重定向到访问 token ,但我总是以无法验证您错误结束我试图将签名添加为最后一个 header ,但它也不起作用。当我删
我尝试通过 https://api.twitter.com/oauth/request_token 请求 token 但总是收到 401 错误。 我通过 curl 进行测试(很容易看到会发生什么)。
(注意如果你不懂clojure我可以用Java翻译代码,请问) 我将 scribe 与 clojure 一起使用,我发现使用 Twitter 登录时存在一些问题,我正在使用的代码: (def twit
我正在尝试使用 RestSharp访问 Etsy 的 API。这是我用来尝试获取 OAuth 访问 token 的代码: var authenticator = OAuth1Authe
从早上开始,我就一直在努力了解如何在我的 webApp (Spring-MVC) 和 Spring-Social 之间实现登录功能。我正在使用 XML 配置,看起来效果很好。我在使用 Twitter
我是一名优秀的程序员,十分优秀!