2012-03-16 13 views
1

私はKerberosで認証できるシンプルなActive Directoryツールを構築しようとしています。間違ったユーザー名/パスワードでjaas kerberosログイン例外が発生する

テストしながら、私は非常に迷惑であるという問題に上陸しました!無効な値をフィールドに入力して送信すると(広告に存在しないユーザーまたは悪いユーザー/パスワードの組み合わせ)、LoginExceptionJavadoc)が表示されます。私がそれを捕らえて、誤った入力のためにログインが失敗したと自動的に言うならば、それは良いでしょう。

問題は、私は、Active Directoryとの接続に問題がある場合、または要求タイムアウトた場合、私は同じ例外を取得することです。私は、トレースを印刷する場合、私は別のメッセージを見ることができますが、例外タイプは同じです...

私が間違っているか、私はそれを動作させるために別の何かをキャッチすることができれば何かをしている場合、あなたは知っています。私は既にサブクラスLoginFailedExceptionをキャッチしようとしましたが、機能しませんでした。LoginExceptionJavadoc)タスクに直接行きました。

はここで順に2つの問題のためのトレースです: 間違ったユーザ名/パスワード

javax.security.auth.login.LoginException: Pre-authentication information was invalid (24) 
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Unknown Source) 
at com.sun.security.auth.module.Krb5LoginModule.login(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at javax.security.auth.login.LoginContext.invoke(Unknown Source) 
at javax.security.auth.login.LoginContext.access$000(Unknown Source) 
at javax.security.auth.login.LoginContext$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.login.LoginContext.invokePriv(Unknown Source) 
at javax.security.auth.login.LoginContext.login(Unknown Source) 
at com.banctecmtl.ca.vlp.tools.ActiveDirectoryValidator.validateUser(ActiveDirectoryValidator.java:80) 
at com.banctecmtl.ca.vlp.controller.UserAccessController.authentify(UserAccessController.java:161) 
at com.banctecmtl.ca.vlp.view.webview.server.UserAccessServiceImpl.authenticate(UserAccessServiceImpl.java:23) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: KrbException: Pre-authentication information was invalid (24) 
at sun.security.krb5.KrbAsRep.<init>(Unknown Source) 
at sun.security.krb5.KrbAsReq.getReply(Unknown Source) 
at sun.security.krb5.Credentials.sendASRequest(Unknown Source) 
at sun.security.krb5.Credentials.acquireTGT(Unknown Source) 
... 42 more 
Caused by: KrbException: Identifier doesn't match expected value (906) 
at sun.security.krb5.internal.KDCRep.init(Unknown Source) 
at sun.security.krb5.internal.ASRep.init(Unknown Source) 
at sun.security.krb5.internal.ASRep.<init>(Unknown Source) 
... 46 more 

Active Directoryの到達不能(ネットワークカード無効:P)を

javax.security.auth.login.LoginException: ADNAMEHERE.LAN 
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Unknown Source) 
at com.sun.security.auth.module.Krb5LoginModule.login(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at javax.security.auth.login.LoginContext.invoke(Unknown Source) 
at javax.security.auth.login.LoginContext.access$000(Unknown Source) 
at javax.security.auth.login.LoginContext$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.login.LoginContext.invokePriv(Unknown Source) 
at javax.security.auth.login.LoginContext.login(Unknown Source) 
at com.banctecmtl.ca.vlp.tools.ActiveDirectoryValidator.validateUser(ActiveDirectoryValidator.java:80) 
at com.banctecmtl.ca.vlp.controller.UserAccessController.authentify(UserAccessController.java:161) 
at com.banctecmtl.ca.vlp.view.webview.server.UserAccessServiceImpl.authenticate(UserAccessServiceImpl.java:23) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: java.net.UnknownHostException: ADNAMEHERE.LAN 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source) 
at java.net.InetAddress.getAddressFromNameService(Unknown Source) 
at java.net.InetAddress.getAllByName0(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getAllByName(Unknown Source) 
at java.net.InetAddress.getByName(Unknown Source) 
at sun.security.krb5.internal.UDPClient.<init>(Unknown Source) 
at sun.security.krb5.KrbKdcReq$KdcCommunication.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.security.krb5.KrbKdcReq.send(Unknown Source) 
at sun.security.krb5.KrbKdcReq.send(Unknown Source) 
at sun.security.krb5.KrbKdcReq.send(Unknown Source) 
at sun.security.krb5.KrbAsReq.send(Unknown Source) 
at sun.security.krb5.Credentials.sendASRequest(Unknown Source) 
at sun.security.krb5.Credentials.acquireTGT(Unknown Source) 
... 42 more 

どうもありがとう!

答えて

1

あなたはLoginException.getCause()に問題のおかげで原因を判別することができます。その例外が利用可能な場合は、IOExceptionまたはKrbExceptionとなります。

私はテストケースとして this good exampleを使用して、次の例外処理を追加

:その文脈では

try { 
    // Oid mechanism = use Kerberos V5 as the security mechanism. 
    krb5Oid = new Oid("1.2.840.113554.1.2.2"); 
    Client client = new Client(); 
    client.login(username, password); 
} 
catch (LoginException e) { 
    e.printStackTrace(); 
    System.err.println("There was an error during the JAAS login"); 
    Throwable t = e.getCause(); 
    if (t instanceof IOException) { 
     System.err.println("Network issue"); 
    } else if (t instanceof KrbException) { 
     System.err.println("Kerberos issue"); 
    } else if (t != null) { 
     System.err.println(t.getClass()); 
    } 
    System.exit(-1); 
} 

を、KrbExceptionkrb5.confまたは任意の他のパラメータには、無効なKerberosクライアントの設定から無効なユーザー名とパスワードを区別することはできませんスペルミスのように。

IOExceptionのおかげで、DNS名またはIPアドレスが設定に間違っている場合を除いて、ActiveDirectoryサーバーが使用できなくなることは確かです。お使いの設定が正しいこと、および少なくとも1人のユーザのために働く場合

だから、あなたはのActiveDirectoryが利用できない場合IOExceptionLoginExceptionとして原因を取得し、不明なユーザー名または無効なパスワードのような任意の認証の問題のためKrbExceptionます。ところで

は、私は、Kerberosスタックの実装自体は唯一のより多くの詳細がなくてKrbExceptionをスローおそらくので、例外処理が粗いことをあなたに同意します。

この最初のオプションでは、既存のコードで十分な詳細が得られない場合は、com.sun.security.auth.module.Krb5LoginModuleから継承した独自のLoginModuleを作成して根本的な原因に応じて異なる例外を発生させる必要があります。最新のOpenJDKソースコードKrb5LoginModuleを読んでいただきたいと思います。

+0

私はそれだったexeceptionの種類を見ることができた唯一の方法は、これは一種の愚かです...エラーメッセージを解析することです。少なくとも私は '原因instanceof KrbException'を行うことができた場合 – David

+0

賞金は払われました... – David

+0

何が起こったのですか?私はあなたが私に報いるために別の賞金を払うかもしれないと思う... –

関連する問題