3

私はこの問題への答えを高低で検索しました。基本的に、私はC#アプリケーションを作成しています。このアプリケーションは、(最初​​の化身で)OAuth1.0aを使用するProjectplaceAPIで認証されます。現在、oauth_verifierをアドレスバーに返しますが、このvar response = request.GetResponse();メソッドを使用すると、最初に認証の一部として送信したoauth_tokenとを返します。oauth token_secret

おそらく私はこのプロセスが機能することになっている方法を誤解していますが、私はそこにあるすべての答えを読みました、そして誰もこの質問に対処していないようです。コールバックURLがロードされた後、認証ページでユーザー名とパスワードを入力した後、アドレスバー(または他の場所で取得できる場所)からベリファイアコードをプルする必要がありますか、または可能ですか?

OAuth1.0aではアクセストークンを取得するために確認コードが必要であり、確認コードを取得する簡単な方法が見つかりません。

私は本当に助けていただければ幸いです、それは私を狂わせています!!

更新された03.12.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('&');

4

1 に答える 1

0

「アドレスバー」とは、oauth_verifier がリダイレクト URL のクエリ文字列パラメーターを介して ProjectPlace サーバーからサイトに渡されることを意味すると仮定します。C# サーバー側コードでこれを読み取るには、次のようなものを使用します (このソリューションのサンプル コードを変更しました)。

 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()));

 //Note: this is unnecessary - GET is the default
 request.Method = WebRequestMethods.Http.Get; 
 //By casting to HttpWebResponse you get access to the QueryString property
 var response = request.GetResponse() as HttpWebResponse;
 var oauthVerifier = response.QueryString["oauth_verifier"];

//The response stream contains the HTTP response body, 
//which will not contain the URL to which the redirect is sent
//I'm not sure if there is anything there that you will need
var responseBody = new StreamReader(response.GetResponseStream()).ReadToEnd();

 //AUTHORIZE WITH CREDENTIALS FROM USER.  -- Not sure what this section is doing
 var queryString = string.Format("oauth_token={0}", oauthVerifier);
 var authorizeUrl = "https://api.projectplace.com/authorize?" + queryString;
 Process.Start(authorizeUrl);
于 2012-12-03T16:51:11.570 に答える