署名の作成
このページでは、HTTP リクエスト用の OAuth 1.0a HMAC-SHA1 署名を生成する方法について説明します。この署名は、リクエストの認可 で説明されているように、認可済みリクエストの一部として X API に渡すのに適しています。 署名を示すために使用するリクエストは、https://api.x.com/1.1/statuses/update.json への POST リクエストです。生のリクエストは次のようになります:| HTTP メソッド | POST |
パラメーターの収集
次に、リクエストに含まれるすべてのパラメーターを集めます。これらの追加パラメーターがある場所は 2 つあります — URL (クエリ文字列の一部として) とリクエスト本文です。サンプルリクエストには、両方の場所に単一のパラメーターが含まれています:| status | Hello Ladies + Gentlemen, a signed OAuth request! |
| include_entities | true |
| oauth_consumer_key | xvz1evFS4wEEPTGEFPHBog |
| oauth_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |
| oauth_signature_method | HMAC-SHA1 |
| oauth_timestamp | 1318622958 |
| oauth_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |
| oauth_version | 1.0 |
- 署名対象となるすべてのキーと値を パーセントエンコード します。
- パラメーターのリストを、エンコードされたキー [2] を基準にアルファベット順 [1] に並べ替えます。
- 各キー/値のペアについて:
- エンコードされたキーを出力文字列に追加します。
- 「=」文字を出力文字列に追加します。
- エンコードされた値を出力文字列に追加します。
- さらに残っているキー/値のペアがある場合は、「&」文字を出力文字列に追加します。
| status | Hello Ladies + Gentlemen, a signed OAuth request! |
|---|---|
include_entities | true |
oauth_consumer_key | xvz1evFS4wEEPTGEFPHBog |
oauth_nonce | kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg |
oauth_signature_method | HMAC-SHA1 |
oauth_timestamp | 1318622958 |
oauth_token | 370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb |
oauth_version | 1.0 |
署名ベース文字列の作成
ここまでに収集した 3 つの値を 1 つの文字列に結合して、そこから署名を生成します。これは OAuth 仕様で 署名ベース文字列 と呼ばれます。 HTTP メソッド、ベース URL、パラメーター文字列を 1 つの文字列にエンコードするには:- HTTP メソッドを大文字に変換し、出力文字列をその値に設定します。
- 出力文字列に「&」文字を追加します。
- URL を パーセントエンコード して、出力文字列に追加します。
- 出力文字列に「&」文字を追加します。
- パラメーター文字列を パーセントエンコード して、出力文字列に追加します。
署名キーの取得
最後に収集するデータは、リクエストを行っている X アプリ と、リクエストが代わりに行われているユーザーを識別する secret です。これらの値は非常に機密性が高く、決して誰とも共有すべきではないことに注意してください。 X に対してアプリを識別する値は consumer secret と呼ばれ、アプリの詳細ページ を表示することで Developer Console で確認できます。これは X アプリが送信するすべてのリクエストで同じになります。| Consumer secret | kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw |
| OAuth token secret | LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE |
| 署名キー | kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE |
署名の計算
最後に、署名ベース文字列と署名キーを HMAC-SHA1 ハッシュアルゴリズムに渡して署名を計算します。アルゴリズムの詳細は hash_hmac 関数として説明されています。 HMAC 署名関数の出力はバイナリ文字列です。これを base64 エンコードして署名文字列を生成する必要があります。例えば、このページに示されているベース文字列と署名キーで得られる出力は 2E CF 77 84 98 99 6D 0D DA 90 5D C7 17 7C 75 07 3F 3F CD 4E です。この値を base64 に変換したものが、このリクエストの OAuth 署名です:| OAuth 署名 | Ls93hJiZbQ3akF3HF3x1Bz8/zU4= |