OAuth署名の作成手順

ここではOAuth認証で必要となるOAuth署名の生成手順を説明します。

事前に準備するもの

OAuth署名の生成に必要な以下の事項を確認してください。

  • 認証を受けようとしているI/FのリクエストURI
  • クライアントID
  • 秘密鍵

クライアントIDと秘密鍵についてはI/F利用申請後、ZDCより発行されます。

署名生成の流れ

OAuth署名の生成の流れは以下のようになります。

  1. 署名対象のテキスト(Signature Base String)を生成
  2. 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=
 

OAuth署名生成 PHP実装サンプル

OAuth署名生成のPHP実装サンプルです。

OAuth署名生成 python2実装サンプル

OAuth署名生成のpython2実装サンプルです。

OAuth署名生成 python3実装サンプル

OAuth署名生成のpython3実装サンプルです。