エクスポート (0) 印刷
すべて展開

Simple Web Token (SWT)

更新日: 2015年3月

この 2009 年のホワイト ペーパーは、インターネット技術標準化委員会 (IETF) に対する Simple Web Token (SWT) の標準提案として作成されました。このドキュメントはまだ完全ではなく、また、ヘルプ トピックでもありませんが、SWT トークンの形式と使用に関する有用な情報が記載されています。

バージョン 0.9.5.1、2009 年 11 月 4 日

Simple Web Token (SWT) は、2 つのパーティ間でアサーションを送信するための形式を提供します。アサーションは名前/値ペアのセットであり、HTML フォーム エンコードされて得られた文字列が、パーティ間で共有されているキーを使用して SHA 256 HMAC によってアサートされています。

  • Dick Hardt (dick.hardt@microsoft.com)、エディター

  • Yaron Goland (yarong@microsoft.com)

この仕様は、次の URL から入手可能な Open Web Foundation Agreement Version 0.9 に基づいて使用できます: [http://groups.google.com/group/open-web-board/web/owf-agreement-for-final-specs---pt-9-draft][注: 更新された URL は保留中です。]この仕様に対する Open Web Foundation Agreement Version 0.9 の署名済みコピーは、[Insert Group Agreement Store URI] で確認できます。これには、上記に加えて追加の関係者も含まれている場合があります。この仕様の使用は他のサード パーティの権利の対象となる場合があります。この仕様は "現状のまま" で提供されます。貢献者は明示的にあらゆる保証 (明示的、暗黙的、またはそれ以外) を放棄します。これには、この仕様に関連する商品性、非侵害、特定の目的に対する適合性、またはタイトルの黙示の保証が含まれます。この仕様の実装または使用に関するすべてのリスクは、この仕様の実装者およびユーザーが負うものとします。いかなる場合も、すべての当事者は、この仕様またはこの仕様が準拠する合意に関するあらゆる種類の行為を原因とする、利益の損失、またあらゆる形式の間接的、特別、偶発的、または間接的な損害について、他のすべての当事者に対する責任を負いません。契約違反、不法行為 (過失を含む)、またはその他の理由を問わず、また、そのような損害の可能性があることが他の当事者に通知されていたかどうかは問いません。

Simple Web Token (SWT) は、コンパクトで HTTP などのプロトコルのヘッダーに簡単に含めることができるようフォーマットされた単純なアサーションを送信するための形式を定義します。単純なアサーションは、名前/値ペアのセットとして表すことができます。HTML フォーム エンコードされた値は、理解しやすく安全な形式であるという HTTP ヘッダーに求められる方針を満たしています。

SWT は重要な識別情報やアクセス情報を伝達するため、改ざんを防ぐための方法が必要です。そのために、SWT で唯一必須の名前/値ペアである HMACSHA256 を導入します。これは常に SWT 内の最後の名前/値ペアであり、その値は、SWT 内の他の名前/値ペアの SHA 256 HMAC です。

SWT で使用されるその他の名前/値ペアの選択は、この仕様の範囲外です。とは言え、さまざまなアサーション フレームワークでその有用性が実証されている多数の条件と属性があります。具体的には、Issuer、Audience、および ExpiresOn です。これらの名前/値ペアの使用は必須ではないものの、相互運用性を容易にするために、ここで定義します。

最終的に、SWT を交換するパーティによって多くの属性が作成されることが予想されます。逆引き DNS 名を使用することで、名前の競合について心配することなく、新しい属性名を容易に作成できるようになります。また、URI を名前として使用することもサポートします。逆引き DNS 名でも URI でもない名前はプライベート名であり、これは SWT のプロデューサーおよびコンシューマー間のアグリーメントによって定義されるため、競合の可能性があります。この仕様で定義される名前は予約されています。

このドキュメントに含まれるキーワード「MUST (しなければならない)」、「MUST NOT (してはならない)」、「REQUIRED (必須である)」、「SHALL (するものとする)」、「SHALL NOT (しないものとする)」、「SHOULD (すべきである)」、「SHOULD NOT (すべきではない)」、「RECOMMENDED (推奨される)」、「MAY (してもよい)」、および「OPTIONAL (省略可能である)」は、[RFC2119] (Bradner, B.、「RFC において要請の程度を示すために用いるキーワード」) の説明に従って解釈されるものとします。ドメイン名の例には、[RFC2606] D. Eastlake、A. Panitz "最上位 DNS 名の予約" が使用されます。

SWT を生成するパーティは、SWT のプロデューサーです。SWT を検証するパーティは、SWT のコンシューマーです。SWT を生成する前に、プロデューサーとコンシューマーは SWT に含まれる属性について合意しており、さらに、ランダムに生成された 256 ビット キーを帯域外で交換済みです。SWT を生成するには、プロデューサーは次の手順を実行します。

  1. SWT で転送される名前/値ペアを収集し、HTML 4.01 の 17.13.4 に準拠した application/x-www-form-urlencoded としてフォーム エンコードします。

  2. フォーム エンコードされた SWT と合意済みのキーを SHA 256 HMAC プロセスに入力します。

  3. 結果として得られる HMAC 値を取得し、RFC 4648 のセクション 4 に準拠する Base64 を使用してエンコードします。

  4. フォーム エンコーディング ルールに続いて、名前 "HMACSHA256" と base 64 エンコードされた HMAC 値をフォーム エンコードされた SWT の末尾に追加します。

SWT のコンシューマーは次の手順を実行して、SWT がプロデューサーによって生成されており、改ざんされていないことを検証します。

  1. 送信済みの SWT を取得し、その文字列を "&HMACSHA256=" より前の部分と残りの部分 (URL エンコードされた HMAC) に分割します。最初の部分は noHMACSWT です。

  2. SWT 文字列の残りの部分を URL デコードします。これは submittedHMAC です。

  3. 合意済みのキーを使用して noHMACSWT に対する HMAC を生成し、次に RFC 4648 のセクション 4 の Base64 エンコーディングに準拠する Base64 を使用してエンコードします。結果の文字列は localHMAC になります。

  4. submittedHMAC と localHMAC に対して文字単位の比較を実行します。これらの文字列が等しい場合は、SWT 上の HMAC は有効です。

SWT プロデューサーが、次の情報を含む SWT を発行するとします。

Issuer = issuer.example.com
ExpiresOn = 1/1/2010, Midnight
com.example.group = gold
over18 = true

次の HMAC キー値 (base 64 で表記) を使用します。

N4QeKa3c062VBjnVK6fb+rnwURkcwGXh7EoNK34n0uM=

この例の Issuer および ExpiresOn は、この仕様で予約済みの名前です。属性 com.example.group は、example.com ドメインの所有者によって作成されたグループの構文とセマンティクスの定義に一致しています。over18 は、SWT のプロデューサーおよびコンシューマー間で決定された非公開で定義されている属性です。

SWT をエンコードする前に、ExpiresOn を 1/1/1970 の午前 0 時 (UTC) から有効期限の時刻である 1/1/2010 の午前 0 時までの秒数に変更する必要があります。結果は 1262304000 です。

  1. 名前/値ペアを HTML フォームにエンコードします。結果は次のとおりです (読みやすくするため改行が挿入してあります)。

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true
    
  2. 次に、キーを使用して以前の値の HMAC を計算します。

  3. HMAC を Base64 エンコードします。結果は次のとおりです。

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. 結果として得られた base64 エンコードされた HMAC を URL エンコードして、アサーションの最後にアタッチします。結果の SWT は次のとおりです (読みやすくするため改行が挿入してあります)。

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    HMACSHA256=
    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    

  1. SWT を次の位置で分割します: &HMACSHA256=。 次の noHMACSWT 文字列が得られます (読みやすくするために改行が追加されています)。

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    
    また、submittedHMAC 文字列は次のとおりです。

    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    
  2. 次に、submittedHMAC を URL デコードします。結果は次のとおりです。

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  3. noHMACSWT および HMAC キー値を使用して localHMAC を計算し、その結果を base64 エンコードして、次の localHMAC 値を取得します。

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. submittedHMAC と localHMAC を比較し、同じ文字列であることを確認します。その後、noHMACSWT を URL デコードして SWT 値にアクセスします。

次の名前/値ペアは省略可能です。これらが役立つ多くの一般的なシナリオで相互運用性を容易にするために定義されています。

 

名前 値の構文 値のセマンティクス

Issuer

UTF-8 文字列

SWT を発行するパーティを識別します。

ExpiresOn

符号なし 10 進法の整数値を表す ASCII 文字列です。

SWT でそれ以降の処理が許容されなくなる時点を識別します。

有効期限の日時は、1970-01-01T0:0:0Z から UTC で計測される有効期限の時点までに経過する秒数として記録されます。

対象ユーザー

UTF-8 文字列

SWT が対象としている SWT オーディエンスを識別します。SWT コンシューマーが受信する SWT に SWT オーディエンスが識別されないオーディエンス値が含まれている場合、その SWT が拒否されることを目的としています。

SWT プロデューサーは、逆引き DNS 名または URI を使用して追加の属性を定義できます。

SWT のプロデューサーとコンシューマーは、予約名でもパブリック名でもない属性名に同意することができます。これらの名前は、上記の「予約名」セクションで定義されている予約名の一覧にあってはなりません。パブリック名とは異なり、これらのプライベート名は競合する可能性があるため、注意して使用する必要があります。

関連項目

コミュニティの追加

追加
表示:
© 2015 Microsoft