2017-10-09 12 views
0

この責任をKerberosに委任していると思われるActive Directoryに私のSpringベースのアプリケーションでユーザー認証を委任するための助けが必要です。Java-Spring-LDAP-Kerberos

私は、Spring Serverの設定で、LDAPサーバーと連携するようにSpringのガイドラインに従っています。それはうまくいった。

実際のLDAPサーバーのホスト、ポートを取得しました。私はそれに話すためにSpring Securityを設定します、それは私が認証することを許可しません。

OK、jxplorerをダウンロードし、LDAPサーバーに正常に接続します。 jxplorerがHOST、PORT、USERNAME、PASSWORDのみを知っているLDAPに接続できるのであれば、私のアプリケーションは同じことができるはずです。

奇妙なことに、私のLDAPはOU = peopleを表示していません。私の人々は、様々なOU、つまり部署ごとのOUの中で、木の中に深く散らばっていますが、ほとんどの人は木の中で同じように深く見つけられます。

また、WEIRDLYでは、個人を一意に識別する私の実際の人ノードはuserPassword属性を持っていません。

私は、自分の部門を表すOUを調べて個人を認証しようとし、パスワードmailNickname(PlaintTextPasswordEncoder()を使用)として使用するように指示し、ポート3268ではなく、389.

この時点で私は推測 - LDAPは、私の春のベースのアプリには、Kerberosと話す必要があると言っている、私はそれを行う方法を教えていない私のアプリが認証に失敗する理由を説明しています。しかし、誰もjxplorerにKerberosがそれを認証し、LDAPツリーのビューを取得することはできないと言いました。明らかに、私の春のアプリの仮定!= jxplorerの前提。私は彼らに全く同じ情報を与えますが、一方は他方を認証するために管理します。誰でも構いませんか?

編集: 大丈夫ですので、まだ解決していませんが、私のエラーは変更されており、それは進歩の印です。

私はこれに応じて春のように構成:私がログインしようとしたとき、私は間違ったパスワードまたはユーザー名を与えればlink

は今、私ははっきりとパスワードが間違って与えられていることを示している苦情を取得します。ただし、正しいパスワードを入力すると、苦情が異なります。

スタックトレースの端部が含ま:javax.security.auth.login.LoginException:によって引き起こさ を事前認証情報が無効であった(24)

しかし、デバッグは、ユーザーがで発見されていることを示しますkerberosデータベースに「principal is username @ correct_realm」と「added server's keyKerberos Principal correct_user @ correct_realm」と表示され、いくつかの16進ダンプを実行するためです。

そのため、私のキータブは仕事をしていないと確信しています。 KeyTabはmy_keytab_fileです(それ以外の場合は、KeyTabがnullです)。

答えて

0

Kerberosで構成されている場合は、SPNEGOを試すことができます。これは、JavaのKerberosのための最良のライブラリの1つです。

READ:ケルベロス認証用http://spnego.sourceforge.net/

サンプルコード:

使用例(ユーザ名/パスワード):

public static void main(final String[] args) throws Exception { 
    System.setProperty("java.security.krb5.conf", "krb5.conf"); 
    System.setProperty("sun.security.krb5.debug", "true"); 
    System.setProperty("java.security.auth.login.config", "login.conf"); 

    SpnegoHttpURLConnection spnego = null; 

    try { 
     spnego = new SpnegoHttpURLConnection("spnego-client", "dfelix", "[email protected]"); 
     spnego.connect(new URL("http://medusa:8080/index.jsp")); 

     System.out.println(spnego.getResponseCode()); 

    } finally { 
     if (null != spnego) { 
      spnego.disconnect(); 
     } 
    } 
}