第13章 認証および承認

13.1. Kerberos と SPNEGO の統合

13.1.1. Kerberos と SPNEGO の統合

Kerberos はオープンネットワークのコンピューティング環境向けの認証方法です。チケットとオーセンティケーターがユーザーとサーバーのアイデンティティーを確立することが基盤となります。これにより、セキュアでない環境上で通信する 2 つのノードがセキュアな状態でお互いのアイデンティティーを確立できるようにします。
SPNEGO は、クライアントアプリケーションによって使用される認証方法で、クライアントアプリケーション自体をサーバーに対して認証します。この技術は、通信を試みるクライアントアプリケーションとサーバーがお互いの認証プロトコルを把握していない場合に使用されます。SPNEGO は、クライアントアプリケーションとサーバー間の共通の GSSAPI メカニズムを判断し、その後のセキュリティー操作をすべてディスパッチします。
Kerberos と SPNEGO の統合

通常の設定では、アクティブディレクトリードメインによって制御されるデスクトップにユーザーがログインします。ユーザーは Web ブラウザー (Firefox または Internet Explorer) を使用して、JBoss EAP 上でホストされる JBoss Negotiation を使用する Web アプリケーションへアクセスします。Web ブラウザーは、デスクトップのサインオン情報を Web アプリケーションへ転送します。JBoss EAP は、アクティブディレクトリーまたは Kerberos サーバーを用いてバックグラウンドの GSS メッセージを使用し、ユーザーを検証します。これにより、ユーザーは Web アプリケーションへのシームレスな SSO を実現できます。

13.1.2. SPNEGO を使用したデスクトップ SSO

SPNEGO を使用するデスクトップ SSO を設定するには、以下を設定します。
  • セキュリティードメイン
  • システムプロパティー
  • Web アプリケーション

手順13.1 SPNEGO を使用するデスクトップ SSO の設定

  1. セキュリティードメインの設定

    セキュリティードメインを設定して、サーバーのアイデンティティーを表し、Web アプリケーションをセキュアにします。

    例13.1 セキュリティードメインの設定

    <security-domains>
    
        <security-domain name="host" cache-type="default">
    
          <authentication>
    
            <login-module code="Kerberos" flag="required">
    
              <module-option name="storeKey" value="true"/>
    
              <module-option name="useKeyTab" value="true"/>
    
              <module-option name="principal" value="host/testserver@MY_REALM"/>
    
              <module-option name="keyTab" value="/home/username/service.keytab"/>
    
              <module-option name="doNotPrompt" value="true"/>
    
              <module-option name="debug" value="false"/>
    
            </login-module>
    
           </authentication>
    
         </security-domain>
    
       
    
         <security-domain name="SPNEGO" cache-type="default">
    
           <authentication>
    
             <login-module code="SPNEGO"  flag="requisite">
    
               <module-option name="password-stacking" value="useFirstPass"/>
    
               <module-option name="serverSecurityDomain" value="host"/>
    
             </login-module>
    
    
             <!-- Login Module For Roles Search -->
    
           </security-domain>
  2. システムプロパティーの設定

    必要な場合は、システムプロパティーをドメインモデルに設定できます。

    例13.2 システムプロパティーの設定

    <system-properties>
    
          <property name="java.security.krb5.kdc" value="mykdc.mydomain"/>
    
          <property name="java.security.krb5.realm" value="MY_REALM"/>
    
        </system-properties>
  3. Web アプリケーションの設定

    オーセンティケーターは上書きできませんが、NegotiationAuthenticator をバルブとして jboss-web.xml 記述子に追加し、Web アプリケーションを設定できます。

    注記

    セキュア化するリソースの決定に使用されるため、security-constraint および login-config が web.xml ファイルに定義されている必要があります。しかし、選択された auth-method はこのオーセンティケーターによって上書きされます。

    例13.3 Web アプリケーションの設定

     <!DOCTYPE jboss-web PUBLIC
      "-//JBoss//DTD Web Application 2.4//EN"
      "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
    
      <jboss-web>
    
        <security-domain>SPNEGO</security-domain>
    
        <valve>
    
          <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name>
    
        </valve>
    
      </jboss-web>
    また、JBoss Negotiation クラスの場所を特定できるようにするため、Web アプリケーションは META-INF/MANIFEST.MF に定義された依存関係を必要とします。

    例13.4 META-INF/MANIFEST.MF での依存関係の定義

        Manifest-Version: 1.0
    
        Build-Jdk: 1.6.0_24
    
        Dependencies: org.jboss.security.negotiation

13.1.3. Microsoft Windows ドメインでの JBoss Negotiation の設定

本項では、Active Directory ドメインの一部である Microsoft Windows サーバー上で JBoss EAP が実行されている場合に、JBoss Negotiation で使用する必要があるアカウントの設定方法を説明します。
ここでは、サーバーへのアクセスに使用されるホスト名は {hostname}、レルムは {realm}、ドメインは {domain}、JBoss EAP インスタンスをホストするサーバーは {machine_name} を使用します。

手順13.2 Microsoft Windows ドメインでの JBoss Negotiation の設定

  1. 既存のサービスプリンシパルマッピングの消去

    Microsoft Windows ネットワークでは、一部のマッピングが自動作成されます。自動的に作成されたマッピングを削除し、ネゴシエーションが適切に行われるようにサーバーのアイデンティティーをサービスプリンシパルへマップします。マッピングにより、クライアントコンピューター上の Web ブラウザーがサーバーを信頼し、SPNEGO の実行を試みます。クライアントコンピューターは、HTTP{hostname} 形式のマッピングに対し、ドメインコントローラーを検証します。
    既存のマッピングを削除する手順は次のとおりです。
    • コマンド setspn -L {machine_name} を使用して、コンピューターに対してドメインに登録されたマッピングをリストします。
    • コマンド setspn -D HTTP/{hostname} {machine_name} および setspn -D host/{hostname} {machine_name} を使用して、既存のマッピングを削除します。
  2. ホストユーザーアカウントを作成します。

    注記

    ホストユーザー名には {machine_name} 以外の名前を使用してください。
    これ以降では、ホストユーザー名として {user_name} を使用します。
  3. {user_name}{hostname} の間のマッピングを定義します。

    • コマンド ktpass -princ HTTP/{hostname}@{realm} -pass * -mapuser {domain}\{user_name} を実行し、サービスプリンシパルマッピングを設定します。
    • 入力を要求されたら、ユーザー名のパスワードを入力します。

      注記

      ユーザー名のパスワードをリセットします。これはキータブをエクスポートするために必要です。
    • コマンド setspn -L {user_name} を実行し、マッピングを検証します。
  4. ユーザーのキータブを、JBoss EAP がインストールされているサーバーへエクスポートします。

    コマンド ktab -k service.keytab -a HTTP/{hostname}@{realm} を実行し、キータブをエクスポートします。

    注記

    このコマンドは、HTTP/{hostname} プリンシパルのチケットを、JBoss 上でホストセキュリティードメインを設定するために使用されるキータブ service.keytab へエクスポートします。
  5. セキュリティードメイン内のプリンシパルを次のように定義します。
    <module-option name="principal">HTTP/{hostname}@{realm}</module-option>