5

以下のコードは、この時点で毎回 401 Unauthorized エラーを返します。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://query.yahooapis.com/v1/yql?q=select%20fields.value%20from%20social.contacts%20where%20guid%3Dme&diagnostics=false");
request.Headers.Add(
    "Authorization: OAuth " +
    "realm=\"" + "yahooapis.com" + "\"," +
    "oauth_consumer_key=\"" + ConfigurationManager.AppSettings["yahoo_oauth_consumer_key"] + "\"," +
    "oauth_nonce=\"" + Guid.NewGuid().ToString() + "\"," +
    "oauth_signature_method=\"" + "PLAINTEXT" + "\"," +
    "oauth_timestamp=\"" + ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / (1000 * 10000)).ToString() + "\"," +
    "oauth_token=\"" + accessToken.TokenValue + "\"," +
    "oauth_version=\"1.0" + "\"," +
    "oauth_signature=\"" + ConfigurationManager.AppSettings["yahoo_oauth_signature"] + "%26" + "\""
);
StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream(), true);

そして、コードに足を踏み入れるたびに、Yahooがヘッダーに含めるように要求するすべての情報がそこにあるのを確認しますが、この401を取得するたびに.

4

4 に答える 4

2

ご存じのとおり、401 は承認されていないことを意味します。おそらく、署名が無効であることを意味します。

すべてのコードを投稿するわけではありませんが、署名メソッドがパラメーター (最もわかりやすいのはタイムスタンプとノンス) を入力として受け取らないように見えるため、正しい署名を正しく生成する方法がわかりません。すでに署名を正しく計算している場合は、Authorized ヘッダーでまったく同じタイムスタンプと nonce を使用する必要があります。別のものを使用すると、署名が無効になります。

于 2010-11-20T19:26:23.350 に答える
1

私は同じことに遭遇していました...あなたは仕様を注意深く読まなければなりません:

http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

各フィールドの指示に注意深く従ってください。たとえば、oauth_callback="oob"を指定したようには見えません。そのフィールドもありませんでした。指定するとすぐにトークンを取得しました。

于 2011-08-04T14:59:25.430 に答える
1

まず第一に:

http://www.youtube.com/watch?v=lZLP0siJI-8&feature=related

第二に、解決策。

ローカルホストから実行しないでください:P

Yahoo にサインアップしたとき、もっと注意深く読むべきでした。2 回目にサインアップしたところ、API への呼び出しをどのドメインから行うのかが明確に示されています。

于 2010-09-10T09:48:41.837 に答える
0

どなたかの参考になれば幸いです。

ヤフー!ドメインを小文字で保存し、コールバック変数に大文字と小文字が混在するドメインを保存していました。

そこで、ドメインをすべて小文字に変換し、先頭に「www.」を付けました。問題を解決することができました。Yahoo!実際のエラー メッセージを表示するには、ブラウザから最終的な OAUTH URL を使用してサーバーにアクセスします。アプリ内では「無許可」とだけ表示されます。

于 2013-02-23T23:13:57.327 に答える