OAuthアクセストークン(言語固有ではない)の取得 - FlickrとTumblrと同じ問題がありますが、Twitterではありません
-
27-10-2019 - |
質問
私は自分のOAuthライブラリとラッパークラスをPHPで書くという大きな間違いを犯しています。 TwitterのOAuth実装ではすべてが素晴らしく機能しますが、TumblrとFlickrの両方のAccess_Tokenステップに署名することに失敗しました。
そのステップの唯一の違いは、OAUTH_TOKENおよびOAUTH_VERIFIERパラメーターがあることです。私は承認ヘッダーを使用していますが、私が考えることができる唯一の問題は、いくつかのキャラクターエンコードの問題があるということですが、私にはわかりません。
ベース文字列 (明確にするために壊れています):
POST&
http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
%26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1322981994
%26oauth_token%3D72157628270097303-18aa378b4ab02af3
%26oauth_verifier%3Dec7811503fdd4380
%26oauth_version%3D1.0
これはまさにFlickrが期待していることです(彼らはエラー応答でそう言っている)。
承認ヘッダー (明確にするためにも壊れています):
Authorization: OAuth
oauth_consumer_key="eeedfcd4c46a2c12080f58eb90a974d8",
oauth_nonce="322190b47ca680d053338724ad1cc56d35d3e7b5",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1322981994",
oauth_token="72157628270097303-18aa378b4ab02af3",
oauth_verifier="ec7811503fdd4380",
oauth_version="1.0",
oauth_signature="LYJtgHetQWNKX3rtQlSs643FdWY%3D"
Flickrの応答:
oauth_problem=signature_invalid&
debug_sbs=POST&
http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
%26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1322981994
%26oauth_token%3D72157628270097303-18aa378b4ab02af3
%26oauth_verifier%3Dec7811503fdd4380
%26oauth_version%3D1.0
GETまたはPOSTパラメーターはありません。私がここで見たものからすべてが正しく逃げられているようです。署名は、request_tokenステップ(および任意のリクエストのために)のために機能します。サーバークロックが1秒以内にあることを確認しました。明白なものが足りないのですか?これをどのように診断しますか?
解決
自分の質問に答えます。
異なるOAUTHサービスプロバイダーの実装の間には、いくつかの矛盾がありました。
ツイッター
- request_tokenステップに従ってOAUTH_CALLBACKを期待します
- Access_Token応答までOAUTH_TOKEN_SECRETを返しません
- したがって、Access_Tokenリクエストに署名する際に空のoauth_token_secretがあります
Flickr&Tumblr
- Authenticate(IE Authorize)ステップでOAUTH_CALLBACKを期待してください
- request_token stepをrefering oauth_token_secretを返します(そして、それを覚えて、それを使用してアクセス_tokenリクエストに署名することを期待してください)
YouTube(および他のGoogle OAuthサービスプロバイダー):
- Request_Tokenステップに応じて、Googleプロパリエタリの「スコープ」を期待しています
- Authenticate(つまり、oauthauthorizetoken)ステップに関するoauth_callbackが予想されます
- Access_TokenステップでOAUTH_TOKENが承認ヘッダーで渡されたようには見えません(ベース文字列での必要な二重エンコードのために「トークン無効」で応答します)。代わりにポストボディまたはクエリ文字列に渡します。
所属していません StackOverflow