GlassFishでのサイレントドメイン認証

この記事では、GlassFishアプリケーションサーバーにサイレントドメイン認証(Kerberos)を実装する方法を分析します。

テストは、Windows 7 Pro SP1(64ビット)、JDK 1.7.0_25(64ビット)、GlassFish 4(ver 89)を搭載したPCで実施されました。

SPNEGOライブラリを使用します。 この記事は、実際には英語のライブラリページで見つけることができるものの翻訳と適合です。





プリフライト準備


1)サーバーがドメイン内にあることを確認してください。

2)アプリケーションサーバー(GlassFish)がドメインユーザーから起動することを確認します

3)特別に配線されたドメインユーザーからのログイン名とパスワードを持っていることを確認してください(2番目と同じユーザーを使用しました)

4)HelloKDC.javaが正しく機能することを確認します

HelloKDC.javaは、すべてがフライトを開始する準備ができているかどうか、およびフライトが可能かどうかを理解できるようにする小さなアプリケーションです。

このコードでは、数行を追加する必要があります。



//ドメイン(事前認証)アカウント

final String username = "<3番目の段落のユーザー名>";



//事前認証アカウントのパスワード。

final String password = "<3番目の段落のユーザーからのパスワード>";



// krb5設定ファイルの名前

final String krbfile = "krb5.conf";



//ログイン設定ファイルの名前

final String loginfile = "login.conf";



//ログインモジュールの名前

final String module = "spnego-client";




次に、 krb5.confおよびlogin.confファイルを追加します

私の場合、krb5.confは次のようになります。

[libdefaults]

default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc

default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc

allowed_enctypes = aes256-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc



[レルム]

<ルートドメイン> = {

kdc = <KDCサーバーのドメイン名>

default_domain = <ルートドメイン>

}



[domain_realm]

。<ルートドメイン> = <ルートドメイン>




アルゴリズムのどこにaes256-cts-hmac-sha1-96を追加して、Windows 7クライアントで正しく動作するようにしました。

FQDNはルートとは異なりますが、ルートとルートKDCを追加することにしました。



HelloKDCを起動すると、最後に「 接続テストが成功しました。 」と書かれた小さなレポートが表示されます。



行こう!


1)glassfishライブラリがあるディレクトリ、つまりGLASSFISH_HOME \ libにspnego.jarライブラリを直接追加します

2)対応するglassfishドメインのdefault-web.xmlファイルを変更します。これはGLASSFISH_HOME \ domains \ <domain name> \ configフォルダーにあります

変更は、サーブレットフィルターを追加することです。



<filter-name> SpnegoHttpFilter </ filter-name>

<filter-class> net.sourceforge.spnego.SpnegoHttpFilter </ filter-class>



<init-param>

<param-name> spnego.allow.basic </ param-name>

<param-value> true </ param-value>

</ init-param>



<init-param>

<param-name> spnego.allow.localhost </ param-name>

<param-value> true </ param-value>

</ init-param>



<init-param>

<param-name> spnego.allow.unsecure.basic </ param-name>

<param-value> true </ param-value>

</ init-param>



<init-param>

<param-name> spnego.login.client.module </ param-name>

<param-value> spnego-client </ param-value>

</ init-param>



<init-param>

<param-name> spnego.krb5.conf </ param-name>

<param-value> krb5.conf </ param-value>

</ init-param>



<init-param>

<param-name> spnego.login.conf </ param-name>

<param-value> login.conf </ param-value>

</ init-param>



<init-param>

<param-name> spnego.preauth.username </ param-name>

<param-value> HelloKDCのユーザー名</ param-value>

</ init-param>



<init-param>

<param-name> spnego.preauth.password </ param-name>

<param-value> HelloKDCからのユーザーパスワード</ param-value>

</ init-param>



<init-param>

<param-name> spnego.login.server.module </ param-name>

<param-value> spnego-server </ param-value>

</ init-param>



<init-param>

<param-name> spnego.prompt.ntlm </ param-name>

<param-value> true </ param-value>

</ init-param>



<init-param>

<param-name> spnego.logger.level </ param-name>

<param-value> 1 </ param-value>

</ init-param>





<filter-mapping>

<filter-name> SpnegoHttpFilter </ filter-name>

<url-pattern> * .jsp </ url-pattern>

</ filter-mapping>





3)krb5.confファイルをコピーします(GLASSFISH_HOME \ domains \ <domain name> \ configにもあります)

4)GLASSFISH_HOME \ domains \ <domain name> \ configのlogin.confファイルを変更します。前のlogin.confのデータをファイルの最後に追加します(HelloKDCに対して行われました)

5) SPNを登録する

私の場合、マシン名はsmirnoffで、マシンの完全修飾名はsmirnoffです。<完全修飾ドメイン名>なので、2つのSPNをアカウント名(HelloKDNソースとサーブレットフィルターの設定で入力)に登録しました(より正確には、登録されたLAN管理者)。まさに

setspn -A HTTP / smirnoff <アカウント名>

setspn -A HTTP / smirnoff。<完全修飾ドメイン名> <アカウント名>

つまり フルネームと短いレコードを追加します。



作業確認


単純なjspページを使用して操作を確認できます(要求をインターセプトするためにフィルター設定で* .jspマスクを指定したため、jsp)。

Hello SPNEGO Example



Hello <%= request.getRemoteUser() %> !









たとえば、glassfishドメインのdocrootに配置します。

ページにアクセスすると、次のテキストが表示されます。

こんにちは、<あなたのアカウント名>!



PS


ソースコードの表示に対応できませんでした。

記事へのコメントで質問にお答えします。



All Articles