JAAS を使用して、Windows Kerberos チケット キャッシュを使用する Java アプリケーションでシングル サインオンを有効にしています。jaas.conf 構成ファイルは次のようになります。
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
これにより、Jaas LoginContext を作成し、ユーザーの Kerberos チケットを正常に取得できます。このチケットを JMI を使用してサーバー アプリケーションに送信します。ただし、Kerberos チケットが実際に Active Directory によって作成されたものであることをサーバー上で確認することはできません。
現時点では、サーバー プリンシパル (KerberosTicket.getServer()) 名のレルム部分にドメイン名が含まれているかどうかを確認するだけで、非常に安全でないチケットの検証を行っています。しかしもちろん、誰でも同じレルム名で独自の Kerberos サーバーをセットアップし、そのチケットを使用してアプリケーションを開始することができます。
私が見つけたアイデアの 1 つは、Kerberos チケットを使用して Active Directory LDAP に対して認証することでした。残念ながら、Windows 7 を使用しており、Kerberos チケットを再利用して LDAP に対して認証する方法は、レジストリ エントリを設定する場合にのみ機能します ( http://java.sun.com/j2se/1.5.0/docs/guide/security/jgssを参照)。 /tutorials/Troubleshooting.htmlで allowtgtsessionkey を検索します)。これはユーザーにとって受け入れがたいことです。
Active Directory サーバーに対してチケットを検証する方法はありますか? KerberosTicket.getServer() チケットがサーバーのチケットと等しいかどうかを確認する方法があると思いますが、その方法がわかりません。更新: KerberosTicket().getServer() は、サーバー チケット名とレルムのみを含む KerberosPrincipal のみを返すため、検証には適していません。
助けてくれてありがとう、メミンガー