第15章 SAML を用いたシングルサインオン

15.1. セキュリティートークンサービス (STS)

セキュリティートークンサービスは、セキュリティートークンを生成および管理します。特定タイプのトークンは発行しませんが、複数のトークンプロバイダーがプラグインできるようにする汎用インターフェースを定義します。そのため、トークンプロバイダーがトークンタイプごとに存在すれば、さまざまなタイプのトークンに対応するよう設定できます。また、セキュリティートークン要求および応答メッセージの形式も指定します。
セキュリティートークン要求メッセージは、以下を指定します。
  • Issue や Renew などの要求タイプ。
  • トークンのタイプ。
  • 発行されたトークンのライフタイム。
  • トークンを要求したサービスプロバイダーに関する情報。
  • 生成されたトークンを暗号化するために使用される情報。

注記

PKCS#11 トークンのサポートが JBoss EAP バージョン 6.3.0 より追加されました。
provider 属性を使用すると、EAP のセキュリティーレルムは PKCS#11 キーおよびトラストストアの定義を許可できます。このパラメーターに指定された値は、関連する KeyStore.getInstance("PKCS11") 呼び出しへ渡され、キーとトラストストアが初期化されます。
この新しいサポートの設定については、EAP ドキュメントの範囲外になります。この機能を使用したいユーザーは、PKCS#11 ハードウェアおよびソフトウェアのインストールや、java.security ポリシーファイルに必要なエントリーに関する正しい知識が必要になります。Oracle の 『Java PKCs#11 Reference Guide』 にこの情報が記載されています。
トークン要求メッセージは、SOAP メッセージのボディーに含まれ送信されます。トークン要求に関連するすべての情報は RequestSecurityToken 要素で囲まれます。要求の例には、この要求が Issue 要求であることを指定する RequestType と、発行するトークンのタイプを指定する TokenType の 2 つの WS-Trust 要素も含まれています。
WS-Trust 要求メッセージの例は以下のとおりです。

例15.1 WS-Trust セキュリティートークン要求メッセージ

<S11:Envelope xmlns:S11=".." xmlns:wsu=".." xmlns:wst="..">  
   <S11:Header>  
      ...  
   </S11:Header>  
   <S11:Body wsu:Id="body">  
      <wst:RequestSecurityToken Context="context">  
         <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType>  
         <wst:RequestType>  
            http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue  
         </wst:RequestType>  
      </wst:RequestSecurityToken>  
   </S11:Body>  
</S11:Envelope>
セキュリティートークン応答の例は次のとおりです。

例15.2 セキュリティートークン応答メッセージ

    <wst:RequestSecurityTokenResponse Context="context" xmlns:wst=".." xmlns:wsu="..">  
       <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType>  
       <wst:RequestedSecurityToken>  
          <token:SpecialToken xmlns:token="...">  
             ARhjefhE2FEjneovi&@FHfeoveq3  
          </token:SpecialToken>  
       </wst:RequestedSecurityToken>  
       <wst:Lifetime>  
          <wsu:Created>...</wsu:Created>  
          <wsu:Expires>...</wsu:Expires>  
       </wst:Lifetime>  
    </wst:RequestSecurityTokenResponse>
セキュリティートークン応答の例では、TokenType 要素は発行されたトークンのタイプを指定し、RequestedSecurityToken 要素にはトークン自体が含まれています。トークンの形式は、トークンのタイプによって異なります。Lifetime 要素は、いつトークンが作成され、期限切れになるかを指定します。
セキュリティートークン要求の処理

セキュリティートークン要求の処理手順は次のとおりです。

  • クライアントがセキュリティートークン要求を PicketLinkSTS に送信します。
  • PicketLinkSTS が要求メッセージを解析し、JAXB オブジェクトモデルを生成します。
  • 必要な場合、PicketLinkSTS は設定ファイルを読み取り、STSConfiguration オブジェクトを作成します。その後、WSTrustRequestHandler への参照を設定から取得し、要求の処理をハンドラーインスタンスへ委譲します。
  • 要求ハンドラーは必要な場合に STSConfiguration を使用してデフォルト値を設定します (要求がトークンのライフタイム値を指定しない場合など)。
  • WSTrustRequestHandlerWSTrustRequestContext を作成し、PicketLinkSTS より受信した JAXB 要求オブジェクトおよび呼び出し元プリンシパルを設定します。
  • WSTrustRequestHandlerSTSConfiguration を使用して、要求されたトークンのタイプを基に要求の処理に使用する必要がある SecurityTokenProvider を取得します。その後、プロバイダーを呼び出し、構築された WSTrustRequestContext をパラメーターとして渡します。
  • SecurityTokenProvider インスタンスはトークン要求を処理し、発行されたトークンを要求コンテキストに保存します。
  • WSTrustRequestHandler はトークンをコンテキストから取得し、必要な場合は暗号化します。また、セキュリティートークンが含まれる WS-Trust 応答オブジェクトを構築します。
  • PicketLinkSTS は要求ハンドラーによって生成される応答を書き取り、クライアントへ返します。