OAuth1.0

リクエストの署名

署名作成方法

署名は以下の手順で生成します。アクセストークン取得の際のパラメーターを例にPHPを用いて説明します。

  1. 署名キーを作成
  2. 署名対象のテキスト(Signature Base String)を作成
  3. 1、2を用いて署名を作成


1. 署名キーを作成

URLエンコードしたConsumer SecretおよびToken Secretを&でつなげた文字列が署名キーになります。

$signature_key = urlencode( $consumer_secret ) . '&' . urlencode( $token_secret );

例)Consumer Secretの値が' test_consumer_secret '、Token Secretが' test_token_secret 'であるときは下記のようになります。

test_consumer_secret&test_token_secret

リクエストトークン取得時にはtoken secretがないため空になります。



2. 署名対象のテキスト(Signature Base String)を作成

2-1. HTTPリクエストを次の3つの要素に分解します。

a) HTTPメソッド
b) リクエストURL
c) リクエストURL、リクエストBODY、またはAuthorizationヘッダに含まれるoauth_signature以外のすべてのクエリ(key=value形式)パラメータ

※見やすくするため改行を入れています。

a) GET
b) https://auth.login.yahoo.co.jp/oauth/v2/get_token
c) oauth_version=1.0
&oauth_timestamp=1228169662
&oauth_token=ktr2ppv
&oauth_consumer_key=test_consumer_key
&oauth_signature_method=HMAC-SHA1
&oauth_nonce=ef3a091928d5491624c0ac54d697124422705091
&oauth_verifier=svmhhd

※APIへのリクエストの場合は、oauth_で始まるパラメータだけでなくAPI固有のパラメータもcに含めます。

2-2. クエリパラメータのkey値(手順2-1のc)をアルファベット順にソートして&で結合する。
※見やすくするため改行を入れています。

c) oauth_consumer_key=test_consumer_key
&oauth_nonce=ef3a091928d5491624c0ac54d697124422705091
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1228169662
&oauth_token=ktr2ppv
&oauth_verifier=svmhhd
&oauth_version=1.0

2-3. 分解した3つの要素をそれぞれURLエンコードして&で結合する。

$signature_base_string = urlencode( $http_method ) . '&' . urlencode( $request_url ) . '&' . urlencode( $query_parameter );

※見やすくするため改行を入れています。

GET
&https%3A%2F%2Fauth.login.yahoo.co.jp%2Foauth%2Fv2%2Fget_token &oauth_consumer_key%3Dtest_consumer_key%26oauth_nonce%3Def3a091928d5491624c0ac54d697124422705091%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1228169662%26oauth_token%3Dktr2ppv%26oauth_verifier%3Dsvmhhd%26oauth_version%3D1.0


3. 1、2を用いて署名を作成

署名キーおよび署名対象のテキストでHMAC-SHA1アルゴリズムを利用して16進のダイジェスト値を生成し、その値をBase64エンコード後、URLエンコードした文字列がoauth_signatureの値になります。

$signature = urlencode( base64_encode( hash_hmac('sha1', $signature_base_string, $signature_key, TRUE) ) );

例) 実際に1、2で作成した署名キーと署名対象テキストを用いて生成したoauth_signatureパラメーターは下記のようになります。

8dRVe6xQyXjOpTBvujPfAN3q4rE%3D