OAuth署名の作成手順
ここではOAuth認証で必要となるOAuth署名の生成手順を説明します。
事前に準備するもの
OAuth署名の生成に必要な以下の事項を確認してください。
- 認証を受けようとしているI/FのリクエストURI
- クライアントID
- 秘密鍵
クライアントIDと秘密鍵についてはI/F利用申請後、ZDCより発行されます。
署名生成の流れ
OAuth署名の生成の流れは以下のようになります。
- 署名対象のテキスト(Signature Base String)を生成
- Signature Base Stringを用いてOAuth署名を生成
1.署名対象のテキスト(Signature Base String)を生成
Signature Base Stringと呼ばれるOAuth署名の基になるテキストを生成します。
なお、下記手順中で行うURLエンコードは RFC3986 を使用してください
1-1.
HTTPリクエストを次の3つの要素に分解します。
[要素a] HTTPメソッド |
HTTPリクエストを行うメソッド名です。 メソッド名は全て大文字とします。 |
[要素b] リクエストURI |
クエリパラメータ及びデフォルトポート番号(http:80, https:443) を除いたリクエストURIです。 スキーム(http)、ドメイン名は小文字とします。 |
[要素c] oauth_signature 以外の全てのクエリパラメータ |
リクエストURL、リクエストBODY、またはAuthorizationヘッダに含まれる全てのクエリパラメータ(key=value形式)です。 ただし ”oauth_signature” だけは除いたものとなります。 また、各keyと各valueはそれぞれURLエンコードしてください。 |
以下に分解例を示します。
[要素a]
GET
[要素b]
http://core.its-mo.com/zmaps/api/apicore/core/v1_0/map
[要素c]
oauth_consumer_key=xxxx
&oauth_nonce=5c16a532345ba029
&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1336376644
&oauth_version=1.0
&frewd=%E6%96%B0%E6%A9%8B
&mclv=6
&pflg=2
※見やすくするため改行を入れています
1-2.
クエリパラメータの key 値(1-1節の要素c)をバイト順にソートして ”&” で接続します。
[要素c]frewd=%E6%96%B0%E6%A9%8B&mclv=6&oauth_consumer_key=xxxx
&oauth_nonce=5c16a532345ba029&oauth_signature_method=HMAC-SHA1
&oauth_timestamp=1336376644&oauth_version=1.0&pflg=2
※見やすくするため改行を入れています
1-3.
分解した3つの要素をそれぞれURLエンコードして&で接続します。
[要素c]GET
&http%3A%2F%2Fcore.its-mo.com%2Fzmaps%2Fapi%2Fapicore%2Fcore%2Fv1_0%2Fmap
&frewd%3D%25E6%2596%25B0%25E6%25A9%258B%26mclv%3D6%26oauth_consumer_key%3Dxxxx%26
oauth_nonce%3D5c16a532345ba029%26oauth_signature_method%3DHMAC-SHA1%26
oauth_timestamp%3D1336376644%26oauth_version%3D1.0%26pflg%3D2
※見やすくするため改行を入れています
2.Signature Base Stringを用いてOAuth署名を生成
上記手順で生成したSignature Base StringからOAuth署名を生成します。
2-1.
上記手順で生成したSignature Base Stringの文字列 HMAC-SHA1 アルゴリズムを利用してダイジェスト値を生成します。
ダイジェスト生成時に必要となる秘密鍵には、ZDCから発行された秘密鍵の末尾に & を付加したもの(2-legged OAuthの為、token secret部は省略)を使用します。
[ZDC発行秘密鍵]
5Y2tJsAhJjE6Ur9ywIgKy33ZRdA[ダイジェスト生成に使用する秘密鍵]
5Y2tJsAhJjE6Ur9ywIgKy33ZRdA&
2-2.
2-1で作成したダイジェスト値をBase64エンコードして完成です。
この文字列がHTTPリクエスト時に付加するパラメータ oauth_signature の値となります。
[OAuth署名例]
lbveDLPpzphdCNG+2qgvemmud7c=