Spring Blog

Spring Security Kerberos拡張機能の最初のマイルストーンがダウンロード可能になったことをお知らせします。 このリリースは、http://maven.springframework.org/milestoneのMaven milestoneリポジトリからも入手できます。 Spring Security Kerberos拡張機能を使用すると、ユーザーはURLを開くだけでwebアプリケーションに対して認証されます。 ユーザー名/パスワードを入力する必要はなく、追加のソフトウェアをインストールする必要はありません。Kerberosについて詳しく説明する前に、spring Securityのコアプロジェクトの拡張モジュールを提供するための新しいSpring拡張プロジェクトであるSpring Security Extensionsを紹介し 現在、SAML2統合とKerberos/SPNEGO統合の2つの拡張機能が開発されています。 すべてのモジュールには独自のリリースサイクルがあるため、準備ができたらすぐにこれらの拡張機能の恩恵を受けることができ、次のSpring Securityリリースを待 さらに拡張機能のためのアイデアやコードがあれば、教えてください!

Kerberos/SPNEGO

このモジュールの最初のマイルストーンでは、webアプリケーション用のすぐに使えるKerberos/SPNEGOソリューションを提供します。 Kerberosは標準化されたネットワーク認証プロトコルであり、ブラウザがクライアントであるwebアプリケーションのように、クライアント/サーバーアプリケーシ また、Windowsネットワークでユーザーを認証するための推奨される方法であり、古くて比較的安全でないNTLMを置き換えます。 これに加えて、*NIX環境で広く使用されており、すべての主要なプラットフォーム用の実装があります。 そのため、すでにKerberosが導入されている可能性が非常に高く、これを独自のwebアプリケーションでも使用できるようになりました。 つまり、ユーザーはURLを入力するだけで、ドメインユーザー名で自動的に認証されます。[email protected]このユーザー名は、Spring Securityまたはrequestを使用して見つけることができます。getRemoteUser()を使用しています。 これはどのように機能しますか? ここに簡単な概要があります:

ブラウザはGET要求をwebアプリケーションに送信し(1)、WEBアプリケーションは「ネゴシエート」認証が必要であることを返します(2)。 次に、ブラウザはKerberosサーバーにいわゆるサービスチケットを取得するように要求します(3)。 次に、ブラウザはこのサービスチケットを送信し、呼び出し元の身元を証明し、いくつかの追加のものをwebアプリケーションに送信します(5)。 チケットを検証した後、webアプリケーションとKerberosサーバー間の共有秘密に基づいて、ユーザー名を取得します。

これを機能させるには、すべてのwebアプリケーションをKerberosサーバーに登録し、サービスprinicipalと共有秘密を割り当てて取得する必要があります。 Webアプリケーションの場合、サービスプリンシパルは”HTTP/<完全修飾ドメイン名>@DOMAIN”である必要があります。 例えば”HTTP/[email protected]”、あなたのアプリが実行されている場合web.springsource.com次に、このプリンシパルの資格情報をkeytabファイル(共有秘密)にエクスポートし、これをアプリケーションで使用できるようにする必要があります。 すべてのKerberosベースのシステムはこのように動作しますが、このサービスプリンシパルとkeytabの作成はシステム間で異なります。 Microsoft WindowsとMIT Kerberosでこれを行う方法を紹介しますが、他の実装でも機能するはずです。

microsoft Windows2008Serverを使用したサービスプリンシパルの作成

これはMicrosoft Windows2008Serverを指していますが、2003年と2000年のサーバーでも非常に似ているはずです。 ActiveDirectoryでは、通常のドメインユーザーを作成し、サービスプリンシパル(SPN)を割り当て、コマンドラインユーティリティを使用してkeytabを作成するだけです。 そして今、ステップバイステップ:

サービスプリンシパルになる通常のユーザーを作成します。 ユーザー名とパスワードはKerberosには意味がありませんが、もちろん次のような便利な名前を選択する必要がありますhttp-web.springsource.com.ちょうどあなたがオプションを無効にすることを確認してください”ユーザーは、次のログオン時にパスワードを変更する必要があります”と”パ

その後、コマンドラインツール”ktpass”を使用する必要があります。exe”。 それはすでにWindows2008Serverに含まれていますが、以前のバージョンでは自分でインストールする必要があります。 サーバーのバージョンと一致するバージョンを使用しており、ロケールも一致する必要があることを確認してください。 このツールは、以前に作成したユーザーにサービスプリンシパル名(SPN)を割り当て、ユーザーキーをkeytabファイルにエクスポートします。 サービスプリンシパルが”HTTP/[email protected]”そして、あなたのユーザーはhttp-web.springsource.comその後、ktpassコマンドは次のようになります:


ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *

ktpassは、いくつかのパスワードの入力を求められます。 あなたはそれのためにいくつかの安全なランダムなものを選ぶべきです。 あなたは今、ファイルhttp-webを持っている場合。あなたのディレクトリにkeytab、その後、すべてが正常に動作しました。 このファイルには、サービスチケットを検証するための共有秘密が含まれているため、アプリケーションの後半で必要になります。

MIT Kerberosを使用したサービスプリンシパルの作成

*NIXシステムおよびMac OS Xでは、MIT Kerberos実装が広く使用されています。 MIT Kerberosを使用すると、さらに簡単になります。 Kadminコンソールを開き、次のコマンドを実行するだけです:


kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com

その後、ファイルhttp-webを作成する必要があります。ルートの下のkeytab。 このファイルには、サービスチケットを検証するための共有シークレットが含まれているため、後でアプリケーションで必要になります。

Springセキュリティの構成

まず、要件:

  • Springセキュリティ3.0.0M2
  • SUN JRE/JDK1.6。X
  • KERBEROS環境
  • SPNEGO(Firefox,IE,Safari)に対応したブラウザ)

Spring SecurityでKerberosモジュールを使用するには、フィルタ、認証エントリポイント、および認証プロバイダを宣言するだけです。 私たちは、あなたが出発点として使用することができますサンプルのwebアプリが含まれています。 サービスプリンシパル名を設定し、そこにgenerate keytabを配置するだけです。 サンプルアプリは、上記のダウンロードに含まれています。

セキュリティを開く場合。/src/main/webapp/WEB-INFの下にあるサンプルアプリケーションのxmlファイルには、新しいKerberosモジュールを使用する基本的なSpringセキュリティ構成が表示されます。

最初の2つのbean(SpnegoEntryPointおよびSpnegoAuthenticationProcessingFilter)がハンドシェイクを担当し、K E R B E R O S S E R Viceauthenticationproviderが最終的にサービスチケットを検証します。 現在、SUNのJRE/JDKに含まれているKerberos/SPNEGO実装のみをサポートしています。 Kerberosからユーザー名を取得するだけなので、ロールやその他のユーザー属性を取得するにはUserDetailsServiceも必要です。 このサンプルでは、テストを簡単にするためにダミーの実装を使用します。

ご覧のように、サービスプリンシパル名とkeytabの場所をすでに記入しています。 必要に応じてこれらの値を変更し、以前に生成されたkeytabがこの場所で使用可能であることを確認してください。

サーバーを起動し、SPNEGO認証を試みます。 ブラウザに完全なドメインユーザー名が表示されるはずです。 あなたのコードでは、通常のSpringセキュリティクラスや標準のJavaサーブレット呼び出し要求でユーザー名を取得することができます。getRemoteUser()を使用しています。 動作しない場合(空のページが表示される可能性があります)、次のことを確認してください:

  • ログファイル
  • を確認して、URLに完全修飾ドメイン名(IPアドレスではなく、短縮名ではない)を使用していることを確認してください。
  • Internet Explorerを使用している場合:”Windows統合認証”をオンにし、ドメイン(私たちの場合は)を確認してくださいweb.springsource.com)は、IEのローカルイントラネットサイトセクションに記載されています。
  • Firefoxを使用している場合:ここを見てください。
  • Windowsクライアントを使用している場合: それ以外の場合、WindowsはKERBEROSの代わりにNTLMを使用するため、クライアントとサーバーは異なるマシン上にある必要があります。
  • 関連するすべてのマシンで時刻が同期されているかどうかを確認します。
  • Microsoft ADを使用している場合は、ここにいくつかのさらなるヘルプがあります: http://msdn.microsoft.com/en-us/library/ms995329.aspx
    • これに加えて、適切なKerberos環境を設定することは複雑になる可能性があり、Spring Security Kerberos拡張機能の使用を開始する前にこれを取得することが重要です。 コンサルティング中に発生する問題のほとんどは、Kerberos環境の問題であり、アプリケーション自体の問題ではありません。独自のMavenプロジェクトでSpring Security Kerberos拡張を使用したくない場合は、Spring Milestoneリポジトリをpomに追加する必要があります。xml。 これは次のようになります:

もちろん、依存関係:

サーバーだけでなく、Javaクライアント用のKerberosを提供するなど、まだいくつかの作業がありますが、このマイルストーンリリースを試してみて、いくつかのフィードバックを提供することを願っています。 コミュニティフォーラムは、質問をしたり、新機能についての議論を開始するのに最適な場所です。 または、何か問題が見つかった場合は、Jiraの問題を提起することもできます。

コメントを残す

メールアドレスが公開されることはありません。