これは私をクラッカーに駆り立てています。Web サイトで友人招待スキームを実装しており、ユーザーの Yahoo 連絡先リストにアクセスする必要があります。これを行うために、OAuth と yahoo REST API を使用しています。一連のイベントの完全な概要は次のとおりです。
連絡先への読み取りアクセス権を持つように構成された developers.yahoo.com にプロジェクトをセットアップしました。これは、ホストファイルで 127.0.0.1 を指している作成されたドメイン上にあります (たまたま、localhost が問題を引き起こしている可能性があります)。このため、ドメインは検証されていませんが、これは単に制限が少ないことを意味するだけであり、制限が多いことを意味するとは理解していません。
まず、サーバーでリクエスト トークンを取得します。
https://api.login.yahoo.com/oauth/v2/get_request_token
?oauth_callback=http%3A%2F%2Fdev.mysite.com%2Fcallback.aspx
&oauth_consumer_key=MYCONSUMERKEY--
&oauth_nonce=xmaf8ol87uxwkxij
&oauth_signature=WyWWIsjN1ANeiRpZxa73XBqZ2tQ%3D
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1328796736
&oauth_version=1.0
どちらが返されますか(明確にするために漠然とした試みのためにフォーマットされています):
oauth_token=hxcsqgj
&oauth_token_secret=18d01302348049830942830942630be6bee5
&oauth_expires_in=3600
&xoauth_request_auth_url
=https%3A%2F%2Fapi.login.yahoo.com%2Foauth%2Fv2%2Frequest_auth
%3Foauth_token%3Dhxcsqgj
&oauth_callback_confirmed=true"
次に、xoauth_request_auth_url ページをユーザーにポップアップ表示し、コールバック ページへの検証コードを受け取ります。次に、それをサーバーに送り返し、アクセス トークンと交換できるようにします。
https://api.login.yahoo.com/oauth/v2/get_token
?oauth_consumer_key=MYCONSUMERKEY--
&oauth_nonce=yxhd1nymwd03x189
&oauth_signature=c%2F6GTcybGJSQi4TOpvueLUO%2Fgrs%3D
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1328796878
&oauth_token=hxcqgjs
&oauth_verifier=b8ngvp <- verifier given via callback
&oauth_version=1.0
それはうまくいくようで、アクセス トークンが返されます。
oauth_token=MYVERYLONGACCESSTOKEN--
&oauth_token_secret=MYOATHTOKENSECRET
&oauth_expires_in=3600
&oauth_session_handle=ADuXM093mTB4bgJPKby2lWeKvzrabvCrmjuAfrmA6mh5lEZUIin6
&oauth_authorization_expires_in=818686769
&xoauth_yahoo_guid=MYYAHOOGUID
次に、すぐにアクセス トークンと GUID を使用して連絡先リストを取得しようとします。
http://social.yahooapis.com/v1/user/MYYAHOOGUID/contacts
(HTTP Header added and formatted with line breaks for clarity...)
Authorization: OAuth
realm="yahooapis.com",
oauth_consumer_key="MYCONSUMERKEY--",
oauth_nonce="nzffzj5v82mgf4mx",
oauth_signature="moVJywesuGaPN5YHYKqra4T2ips%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1328796907",
oauth_token="MYVERYLONGACCESSTOKEN--",
oauth_version="1.0"
この呼び出しから 401 Unauthorized が返ってきましたが、その理由を突き止めることは不可能のようです。これらの呼び出しに署名するために、私はgithub でこの宣誓ライブラリを使用しています。私はそれが異常なことや互換性のないことをしているとは思わない。署名には、コンシューマー キー/シークレットとアクセス トークン/シークレットを含めています。ハッシュされている署名ベースを調べたところ、yahoo のドキュメントにある例と同じ形式のようです。ハッシュされていないパラメーターから何かが欠けていると思います。呼び出しが許可されていない理由を見つける方法はありますか、または署名ベースと認証ヘッダーがどのような形式をとるべきかを正確に示す例を知っている人はいますか?