我一直在寻找这个问题的答案。基本上,我正在创建一个 C# 应用程序,它(在它的第一个化身中)将使用使用 OAuth 1.0a 的 Projectplace API 进行身份验证。它目前将 oauth_verifier 返回到地址栏,但是当我使用该var response = request.GetResponse();
方法时,它首先返回我作为授权的一部分发送的oauth_token
and 。oauth token_secret
也许我误解了这个过程的工作方式,但我已经阅读了那里的每一个答案,似乎没有一个答案能解决这个问题。在加载回调 URL 后,在身份验证页面上输入我的用户名和密码后,您是否必须或是否可以从地址栏(或其他任何可以获得的地方)提取验证码?
我相信 OAuth1.0a 需要验证码来检索访问令牌,我找不到一种简单的方法来提取验证码。
我真的很感激任何帮助,这让我发疯了!
2012 年 3 月 12 日更新
感谢您的答复!
本质上,我是在下面发送此初始请求后尝试从 oauth 提供程序检索 oauth_verifier 的客户端,我的下一步是授权然后检索验证程序。我尝试了以下,希望如你所建议的那样,就像在这里的深处游泳:)
//Generate string for initiation request.
requestUri.AppendFormat("?oauth_consumer_key={0}&", consumerKey);
requestUri.AppendFormat("oauth_nonce={0}&", nonce);
requestUri.AppendFormat("oauth_timestamp={0}&", timeStamp);
requestUri.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1");
requestUri.AppendFormat("oauth_version={0}&", "1.0");
requestUri.AppendFormat("oauth_signature={0}", signature);
var request = (HttpWebRequest)WebRequest.Create(new Uri(requestUri.ToString()));
request.Method = WebRequestMethods.Http.Get;
var response = request.GetResponse();
var queryString = new StreamReader(response.GetResponseStream()).ReadToEnd();
var parts = queryString.Split('&');
var token = parts[1].Substring(parts[1].IndexOf('=') + 1);
var tokenSecret = parts[0].Substring(parts[0].IndexOf('=') + 1);
var queryString2 = String.Format("oauth_token={0}", token);
//AUTHORIZE WITH CREDENTIALS FROM USER.
var authorizeUrl = "https://api.projectplace.com/authorize?" + queryString;
Process.Start(authorizeUrl);`
//TRY AND READ VERIFICATION STRING AFTER AUTHORIZATION REDIRECT`
String oauthVerifier = HttpContext.Current.Request.QueryString["oauth_verifier"];
不幸的是,一旦我这样做了,我似乎无法返回一个查询字符串,显示我在地址栏中显示的字符串中清楚地看到的 oauth_verifier。(是的,这是一种非常新颖的描述方式,我正在学习代码以及 OAuth :P)。
感谢您一直以来的帮助。我试图运行上面的,但它只是说“对象引用未设置为对象的实例。”。
另外,如果我尝试使用以前用于获取查询字符串/响应的代码?从使用以下几行的启动请求中,querystring3 只是返回为空白......真是令人沮丧!:)
var queryString3 = new StreamReader(response.GetResponseStream()).ReadToEnd();
var parts3 = queryString3.Split('&');