Liberty での SPNEGO 認証の構成

WebSphere® Application Server Libertyの Simple and Protected GSS-API Negotiation Mechanism (SPNEGO) Web 認証を使用することにより、HTTP 要求にシングル・サインオンを使用できます。 SPNEGO シングル・サインオン (SSO) により、HTTP ユーザーは、デスクトップで Microsoft ® ドメイン・コントローラーに一度だけログインし、 Liberty サーバーで SSO を実現することができます。

Open Liberty Liberty 用の SPNEGO の構成に関する最新資料は、 Open Liberty Web サイトから入手できます。

始めに

注意:
  • SPNEGO SSO は、Windows プラットフォームの場合は Integrated Windows Authentication (IWA) とも呼ばれます。
  • Liberty は、IWA 用に SPNEGO をサポートしますが、 Kerberos および NT LAN Manager (NTLM) はサポートしません。
  • 19.0.0.1以降、 IBM® SDK、 Oracle JDK、および OpenJDK がサポートされます。 19.0.0.1より前は、 IBM SDK のみがサポートされていました。
  • SPENGO および制約付き委任は、 IBM ハイブリッド JDK をサポートしません。
  • このタスクのコマンドと SPNEGO 構成の多くは、大/小文字が区別されます。
  • デフォルトでは、クライアント、Microsoft Active Directory サーバー、および Liberty サーバーのクロックは、相互に 5 分以内に同期する必要があります。 同期に許容できる差異は構成可能です。
  • ソフトウェア構成には、実行中のドメイン・コントローラー、そのドメイン内の少なくとも 1 つのクライアント・マシン、およびアプリケーション内に保護リソースを持つ Liberty サーバーを備えたサーバー・プラットフォーム (合計 3 つの必須マシン) がなければなりません。 ドメイン・コントローラーからの直接の SPNEGO の使用は、サポートされていません。

以下のソフトウェアを構成し、使用可能であることを確認してください。

  1. Active Directory ドメイン・コントローラーおよび関連する Kerberos 鍵配布センター (KDC) を実行する Microsoft Windows® Server。 このトピックでは、そのようなドメイン・コントローラーのホストの例は、myAdMachine.example.com です。 ドメイン・コントローラー名は mydomain.example.com であり、 Kerberos レルム名は、ドメイン・コントローラー名をすべて大文字にした MYDOMAIN.EXAMPLE.COM です。
  2. IETF RFC 2478 で定義されている SPNEGO の認証メカニズムをサポートする Microsoft Windows® ドメイン・メンバー (クライアント)。 該当するクライアントの例として、モダン・ブラウザーや Microsoft .NET クライアントなどがあります。 ほとんどの最新のブラウザーは SPNEGO 認証をサポートしています。 このトピックでは、 クライアントのホストの例は、myClientMachine.example.com です。
  3. アプリケーション内に保護リソースを持つ Liberty サーバーを備えたサーバー・プラットフォーム。 Active Directory のユーザーは、ネイティブ Liberty サーバー認証メカニズムを使用して、 Liberty サーバーの保護リソースにアクセスできなければなりません。 このトピックでは、 Liberty サーバー・ホストの例は myLibertyMachine.example.comです。

このタスクについて

このタスクの目的は、ユーザーが認証を再度行うことなく Liberty サーバー・リソースに正常にアクセスできるようにし、 Microsoft Windows® デスクトップ・シングル・サインオン機能を実現することです。

このタスクでは、SPNEGO Web 認証を使用して HTTP 要求のシングル・サインオンをサポートするように Liberty サーバーを構成する方法を示します。

手順

  1. Microsoft ドメイン・コントローラー (myAdMachine.example.com) で、 Liberty サーバー用の Kerberos サービス・プリンシパル名 (SPN) とキータブ・ファイルを作成します。
    1. Liberty サーバーのユーザー・アカウントを作成します。 このアカウントは、Kerberos サービス・プリンシパル名 (SPN) にマップするために使用されます。 Active Directory マシンの場合、このアカウントの作成は通常、 開始 > 管理ツール > Active Directory ユーザーおよびコンピューターに移動し、パネルで ユーザー を右クリックし、 新規 > ユーザーを選択することで実行できます。 このトピックでは、ユーザー myLibertyMachine_http がパスワード securityを使用して作成されていることを前提としています。
    2. Microsoft setspn コマンドを実行して、ユーザー・アカウントを Kerberos SPN にマップします。 このユーザー・アカウントは、 Liberty サーバーを、KDC を使用する Kerberos サービスとして表します。
      以下に setspn コマンドの例を示します。
      C:\> setspn -a HTTP/myLibertyMachine.example.com myLibertyMachine_http
      
      Registering ServicePrincipalNames for CN=myLibertyMachine_http,CN=Users,DC=MYDOMAIN,DC=EXAMPLE,DC=COM
                       HTTP/myLibertyMachine.example.com
      Updated object
      注: Microsoft setspn コマンド・バージョンが -S オプションをサポートしている場合は、 -Aの代わりに -S オプションを使用する必要があります。
    3. Microsoft ktpass ツールを使用して Kerberos キータブ・ファイルを作成します。 このファイルのデフォルト名は krb5.keytabです。

      以下に ktpass コマンドの例を示します。

      C:\> ktpass -out krb5.keytab -princ HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM -mapUser myLibertyMachine_http -mapOp set -pass security -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
      
      				Targeting domain controller: myAdMachine.MYDOMAIN.EXAMPLE.COM
      				Using legacy password setting method
      				Successfully mapped HTTP/myLibertyMachine.example.com to myLibertyMachine_http.
      				Key created.
      				Output keytab to krb5.keytab:
      				Keytab version: 0x502
      				keysize 93 HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x148d643db283327d3f3d44547da8cade)

      以下のいずれかのコマンドを使用して、Microsoft フォレスト内に重複する SPN がないことを確認します。

      • 重複する SPN を検索するために Microsoft setspn コマンド・バージョンが -X オプションをサポートしている場合は、 setspn -Xを使用します。
        C:\>setspn -X HTTP/myLibertyMachine.example.com 
        
        Processing entry 0 
        found 0 group of duplicate SPNs. 
      • Microsoft ldif コマンドを使用することもできます。 以下の例は、1 つの項目が返されたことを示しています。これは、重複する SPN がないことを意味します。
        C:\>ldifde -f check_SPN.txt -t 3268 -d "" -l servicePrincipalName -r " 
        (servicePrincipalName=HTTP/myLibertyMachine.example.com)" -p subtree 
        
        Connecting to "myAdMachine.MYDOMAIN.EXAMPLE.COM" 
        Logging in as current user using SSPI 
        Exporting directory to file check_SPN.txt 
        Searching for entries... 
        Writing out entries. 
        1 entries exported 
      MS ktpass コマンドを使用すると、-in オプションを用いて、新規作成されたキータブ・ファイルに既存のキータブ・ファイルを組み込むこともできます。 次のサンプル・コマンドは、myOtherKrb5.keytab キータブを組み込みます。
      ktpass -in myOtherKrb5.keytab -out krb5.keytab -princ HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM -mapUser myLibertyMachine_http -mapOp set -pass security -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
      次のサンプル・コマンドは、以下の出力を生成します。
      Targeting domain controller: myAdMachine.MYDOMAIN.EXAMPLE.COM
      Using legacy password setting method
      Successfully mapped HTTP/myLibertyMachine.example.com to myLibertyMachine_http.
      Key created.
      Output keytab to krb5.keytab:
      Keytab version: 0x502
      keysize 93 HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x148d643db283327d3f3d44547da8cade)

      異なる KDC システムでの SPN およびキータブ・ファイルの作成については、 Kerberos サービス・プリンシパル名およびキータブ・ファイルの作成を参照してください。

  2. Liberty サーバー・マシン (myLibertyMachine.example.com) で、 Kerberos キータブ・ファイルと構成ファイル、および SPNEGO Web 認証を有効にします。
    1. Kerberos キータブ・ファイルをドメイン・コントローラーから Liberty サーバー・マシンにコピーします。 このファイルのデフォルトの名前は krb5.keytab であり、 デフォルトのロケーションは、プラットフォームによって異なりますが、Kerberos 構成ファイルと同じディレクトリーです。 各種プラットフォームでのデフォルトのロケーションについては、 次のステップを参照してください。
    2. Kerberos 構成ファイルを作成します。

      Kerberos 構成ファイルには、クライアント構成情報が含まれます。 この情報には、関心のあるレルム用の KDC のロケーション、現行の Kerberos レルムに対するデフォルト、ホスト名から Kerberos レルムへのマッピングが含まれます。 Liberty サーバーの場合は、このファイルを手動で作成する必要があります。

      このファイルのデフォルトのロケーションおよび名前は、以下のようにオペレーティング・システムによって異なります。
      • Windows プラットフォームの場合Windows-デフォルトの場所は c:\windows\krb5.iniです。
      • LINUX プラットフォームの場合Linux® -デフォルトの場所は /etc/krb5.confです。
      • Solaris プラットフォームの場合HP UNIX プラットフォームの場合AIX プラットフォームの場合AIX®、 z/OS®、 HP-UX、および Solaris-デフォルトの場所は /etc/krb5/krb5.confです。

      AIX、 z/OS、 HP-UX、または Solaris プラットフォーム (デフォルトのキータブ・ロケーションに基づく) 用の Kerberos 構成ファイルの例を以下に示します。

      [libdefaults]
                default_realm = MYDOMAIN.EXAMPLE.COM
                default_keytab_name = FILE:/etc/krb5/krb5.keytab
                default_tkt_enctypes = rc4-hmac 
                default_tgs_enctypes = rc4-hmac 
                forwardable  = true
                renewable  = true
                noaddresses = true
                clockskew  = 300
                udp_preference_limit = 1
      [realms]
                MYDOMAIN.EXAMPLE.COM = {
                      kdc = myAdMachine.example.com:88
                      default_domain = example.com
      			}
      [domain_realm]
              .example.com = MYDOMAIN.EXAMPLE.COM
      注: レルム名は通常、大文字で指定します。 Microsoft Active Directoryを使用している場合、レルム名は大文字でなければなりません。
      注: 使用可能なすべての KDC ソリューションがすべての暗号化タイプをサポートしているわけではありません。 暗号化タイプを選択する前に、Kerberos の管理者とユーザーのガイドを参照し、使用する暗号化タイプが KDC でサポートされていることを確認してください。

      Kerberos 構成ファイル、Kerberos キータブ・ファイル、Kerberos SPN、および Kerberos クライアントで、暗号化タイプが共通していることを確認してください。 例えば、 Kerberos クライアントが RC4-HMAC 暗号化タイプを使用する場合、ターゲット・サーバーも RC4-HMAC 暗号化タイプをサポートする必要があり、 Kerberos 構成ファイルの default_tgt_enctypes パラメーターと default_tkt_enctypes パラメーターに RC4-HMAC を最初にリストする必要があります。

      このファイルの内容に関する追加情報および要件については、 Kerberos 構成ファイルの作成を参照してください。

    3. Kerberos 構成ファイルおよびキータブ・ファイルを検証します。

      Kerberos 構成ファイルおよびキータブ・ファイルを検証するには、klist コマンドと kinit コマンドを使用します。

      • JDK コマンド klist を使用して、キータブ・ファイル内の SPN をリストできます。
        klist -k -t /etc/krb5.keytab
      • JDK コマンド kinit を使用して、キータブ・ファイル内の SPN および Kerberos 構成ファイルを検証できます。
        kinit -k -t /etc/krb5.keytab HTTP/myLibertyMachine.example.com

      kinit コマンドの後、klist コマンドを使用して Kerberos チケットをリストできます。 Kerberos チケットを取得できれば、Kerberos キータブおよび構成は有効です。

    4. Liberty サーバーで SPNEGO Web 認証を構成して有効にします。

      Libertyspnego-1.0 フィーチャーを使用可能にすることにより、SPNEGO Web 認証を使用可能にすることができます。

      1. spnego-1.0 フィーチャーを server.xml ファイルに追加します。
        <featureManager>
                <feature>spnego-1.0</feature>
                <feature>appSecurity-2.0</feature>
                ...
        </featuremanager>
        

        spnego-1.0 フィーチャーを追加すると、 自動的に一定の最小構成が行われます。 server.xml ファイルに <spnego> エレメントを指定する必要はありません。 <spnego> エレメントを指定しなくても、以下の構成が暗黙指定されます。

        <spnego
               canonicalHostName="true"
               disableFailOverToAppAuthType="true"
               trimKerberosRealmNameFromPrincipal="true"
               includeClientGSSCredentialInSubject="true" />
        
        注: ランタイムは、以下の形式でデフォルトの SPN を形成します。
        "HTTP/" + java.net.InetAddress.getLocalHost().getCanonicalHostName();

        このデフォルト SPN が krb5.keytab ファイル内にあるものと一致しない場合は、 次の例のように servicePrincipalNames を指定する必要があります。

        <spnego id="mySpnego" servicePrincipalNames="HTTP/myLibertyMachine.example.com"/>
        注: spnego-1.0 フィーチャーが有効になっていて、 <spnego> エレメントが省略されているか、 authFilterRef 属性を使用して構成されていない場合、保護リソースにアクセスするすべての要求で SPNEGO 認証が使用されます。

        認証フィルターの構成について詳しくは、 認証フィルターを参照してください。

        注: krb5Config 属性または krb5Keytab 属性の値が指定されていない場合は、それぞれのファイルがデフォルトの場所に存在することが予期されます。 各種プラットフォームでの Kerberos 構成ファイルおよびキータブ・ファイルのデフォルトのロケーションは、この例の前半に記述されています。
      2. オプション: 必要に応じて、追加の構成オプションを指定します。 Liberty は、多くの一般的な SPNEGO シナリオおよび構成をサポートします。 例えば、特定の要求、Web アプリケーション、ホスト、またはユーザー・エージェントのみに SPNEGO 認証を必要とするように、HTTP 要求をフィルター操作できます。 また、Kerberos 構成ファイルおよびキータブ・ファイルをそれぞれのデフォルトのロケーションから移動することもできます。 以下に、 デフォルトの <spnego> 設定を変更する構成のサンプルを示します。
        <server>
                <featureManager>
                        <feature>spnego-1.0</feature>
                        <feature>appSecurity-2.0</feature>
                        ...
                </featureManager>
                ...
                <authFilter id="myAuthFilter">
                         <host id="myHost" name="example.com" matchType="contains" />
                         <webApp id="myWebApp" name="protectedApp" matchType="equals" />
                </authFilter>
        
                <spnego id="mySpnego"
                        includeClientGSSCredentialInSubject="false"
                        krb5Config="${server.config.dir}/resources/security/kerberos/krb5.conf"
                        krb5Keytab="${server.config.dir}/resources/security/kerberos/krb5.keytab"
                        servicePrincipalNames="HTTP/myLibertyMachine.example.com"
                        authFilterRef="myAuthFilter" />
                </spnego>        
                ...
        </server>

        この構成が使用される場合、受信した要求に SPNEGO 認証が使用されるのは、 Web アプリケーション protectedApp 内のリソースに対する要求で、ホスト名 example.com が含まれている要求に限られます。 また、クライアントの GSS 資格情報は、認証が成功したときにユーザー・サブジェクトに追加されません。 最後に、 サーバーによって使用される Kerberos 構成ファイルおよびキータブ・ファイルには、それぞれのデフォルトのロケーションの代わりに、 サーバー構成ディレクトリー内の特定のロケーションが指定されています。

        その他の構成オプションについては、 Simple and Protected GSS-API Negotiation Mechanism (SPNEGO)を参照してください。

        Kerberos プリンシパル名から WebSphere ユーザー・レジストリー ID へのマッピングについては、 クライアント Kerberos プリンシパル名から WebSphere ユーザー・レジストリー ID へのマッピングを参照してください。

        許可のために Kerberos プリンシパル名を使用する必要があるまれなケースでは、 SPNEGO 認証による許可のための Kerberos プリンシパル名の使用を参照してください。 これらのステップは、必要な場合にのみ、およびデフォルト・マッピングまたは JAAS カスタム・ログイン・モジュール・マッピングを使用しないことを明確に選択したユーザーのみが実行してください。

      Oracle JDK を使用する場合は、以下の例のように、 java.security.krb5.kdc および java.security.krb5.realm JVM システム・プロパティーを jvm.options ファイルに追加します。
      -Djava.security.krb5.kdc=myKdcMachine.example.com
      -Djava.security.krb5.realm=EXAMPLE.COM
  3. クライアント・アプリケーション・マシン (myClientMachine.example.com) でクライアント・アプリケーションを構成します。

    以下のステップは、クライアント・マシンでのみ実行する必要があります。 Active Directory マシンまたは Liberty サーバー・マシンでブラウザーを開始し、これらのステップを実行しても機能しません。

    以下のステップは、SPNEGO で保護されたリソースにブラウザーからアクセスするユーザー向けのものです。 SPNEGO 認証をサポートしているブラウザーをインストールする必要があります。

    Microsoft Internet Explorer:
    1. デスクトップで Windows Active Directory ドメインにログインします。
    2. 「Internet Explorer」 ウィンドウで、 「ツール」 > 「インターネットオプション」をクリックします。 表示されるウィンドウで「セキュリティ」タブをクリックします。
    3. イントラネット」アイコンを選択し、「サイト」をクリックします。
    4. Internet Explorer バージョン 9 以前を使用している場合、次のステップに進みます。 Internet Explorer 10 以降を使用している場合、「ローカル イントラネット」ウィンドウで「詳細設定」をクリックします。
    5. 「ローカル イントラネット」ウィンドウで、「この Web サイトをゾーンに追加する」フィールドに、ホスト名の Web アドレスを入力します。 これによって、「Web サイト」フィールドにリストされる Web サイトに対してシングル・サインオン (SSO) を使用可能にできるようになります。 この情報は、サイトの情報技術スタッフが提供します。 2 番目の「ローカル イントラネット」ウィンドウを閉じ、 「OK」をクリックしてこのステップを完了し、「ローカル イントラネット」ウィンドウを閉じます。
    6. 「インターネット オプション」ウィンドウで、「詳細設定」タブをクリックし、 「セキュリティ」設定までスクロールします。 「統合 Windows® 認証を使用する」ボックスが選択されていることを確認します。
    7. OK」をクリックします。 Microsoft Internet Explorer を再始動して、この構成をアクティブにします。
    Mozilla Firefox:
    1. デスクトップで Windows Active Directory ドメインにログインします。
    2. Firefox のアドレス・フィールドに about:config と入力します。
    3. 「フィルター/検索」ボックスに network.n と入力します。
    4. network.negotiate-auth.trusted-uris をダブルクリックします。 この設定には、ブラウザーを使用した SPNEGO 認証の実行が許可されているサイトがリストされます。 コンマで区切られたトラステッド・ドメインまたは URL のリストを入力します。
      注: network.negotiate-auth.trusted-urisの値を設定する必要があります。
    5. デプロイされた SPNEGO ソリューションが Kerberos 拡張機能 Credential Delegation を使用している場合、network.negotiate-auth.delegation-uris をダブルクリックします。 この設定は、ブラウザーがサーバーにユーザー許可を委任できるサイトをリストします。 コンマで区切られたトラステッド・ドメインまたは URL のリストを入力します。
    6. OK」をクリックします。 更新内容が構成に反映されます。
    7. この構成をアクティブにするため、Firefox ブラウザーを再始動します。
    注: SPNEGO を機能させるには、ユーザーがドメイン・コントローラーにログインしている必要があります。 上記のマシン例を使用すると、ブラウザーを介した SPNEGO 認証が機能するためには、ユーザーは MYDOMAIN.EXAMPLE.COM\username のドメイン・コントローラーにログインする必要があります。
    注: ユーザー ID とパスワードの入力を求めるプロンプトが複数回表示される場合は、前述の手順に従って、クライアント・ブラウザーで SPNEGO サポートを有効にしたことを確認してください。 また、 <spnego> 構成で disableFailOverToAppAuthType 属性が false に設定されていることも確認する必要があります。

結果

これで、ご使用のインターネット・ブラウザーは SPNEGO 認証用に正しく構成されました。 ユーザー ID とパスワードの入力を求めるプロンプトが出されることなく、 Liberty サーバーにデプロイされている、保護されたリソースを使用するアプリケーションを使用できます。

SPNEGO が機能していることを確認するには、ドメイン・コントローラーにログインしてから、 Liberty サーバー上の保護リソースにアクセスします。ドメイン・コントローラーにログインしているため、資格情報の入力を求めるプロンプトは出されません。 しかし、 ドメイン・コントローラーにログインしていないときに保護リソースにアクセスしようとすると、資格情報を求めるプロンプトが出されます。