2012-10-25 53 views
8

これらの資格情報を必要とするプロセスを後で実行するには、Windowsのユーザー名と資格情報を保存する必要があります。ネイティブJava APIを使用してWindowsユーザーの資格情報を検証する

これらをユーザーからの入力として収集する際に、資格情報が正しいかどうかを検証する必要があります。 Windowsシステムの資格情報を検証するのに役立つJavaのネイティブAPIがありますか?

私はLoginContextクラスを通過していましたが、SSO目的でのみ使用できるように見えます。 私が受け取ったもう1つの提案は、これらの資格情報を必要とするプロセスを試して開始し、それが機能するか失敗するかを確認することでした。しかし、これは適切なアプローチに見えません。

誰でもこれをやったことがあるかどうか、またはそれをやり遂げる方法があれば教えてください。

おかげで、 Piyush

+0

から完全に動作するコードこれは、あなたがしたい資格情報のドメイン/ユーザー名のセットですか? – ChadNC

+0

はい、ユーザーから資格情報を取得します。私は彼らが正しいかどうかを検証する必要があります。これは、ローカルマシンのユーザーでもLDAPユーザーでもかまいません。私は、管理者のようなローカルシステムのユーザをより心配しています。 – user1774433

答えて

7

資格情報によっては、ユーザーの実際のパスワードを意味ですか?次に、LDAPを使用してWindows Active Directoryに接続しようとします。関連する質問を参照してください。これを行うにはWindows password Authentication with LDAP

より精巧な方法は、おそらくJNAプラットフォームを経由して、ネイティブウィンドウの呼び出しを使用することです:http://jna.java.net/javadoc/platform/com/sun/jna/platform/win32/package-summary.html

より便利なライブラリでこれを包んだ「ワッフル」と呼ばれるプロジェクトがあります、例えばlogonUser関数はhttps://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/windows/auth/impl/WindowsAuthProviderImpl.javaです。これはwin32 advapi32.dllに直接伝えられます。

これにより、ドメインなしでローカルユーザーに対してWindows認証を行うこともできます。

EDIT:OP

import com.sun.jna.platform.win32.Advapi32; 
import com.sun.jna.platform.win32.Kernel32; 
import com.sun.jna.platform.win32.WinBase; 
import com.sun.jna.platform.win32.WinNT.HANDLEByReference; 

HANDLEByReference phUser = new HANDLEByReference() 
if(! Advapi32.INSTANCE.LogonUser("administrator", InetAddress.getLocalHost().getHostName(), 
    "password", WinBase.LOGON32_LOGON_NETWORK, WinBase.LOGON32_PROVIDER_DEFAULT, phUser)) 
{ 
    throw new LastErrorException(Kernel32.INSTANCE.GetLastError()); 
} 
+0

アクティブディレクトリユーザーである必要はありません。ローカルユーザーでもかまいません。例えば管理者 – user1774433

+0

ありがとうgreyfairer、 JNAを使用してローカルシステムのユーザー資格情報を確認できました。 以下は私の要求に対応するコードスニペットです: – user1774433

+1

これをフォーマットできません: 'import com.sun.jna.platform.win32.Advapi32; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinBase; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; HANDLEByReference phUser =新しいHANDLEByReference() \t(!Advapi32.INSTANCE.LogonUser( "管理者"、のInetAddress.getLocalHost()。GETHOSTNAME()、 "パスワード"、WinBase.LOGON32_LOGON_NETWORK、\t WinBase.LOGON32_PROVIDER_DEFAULT、phUser場合)){ \t新しいLastErrorExceptionをスローする(Kernel32.INSTANCE.GetLastError()); \t} ' – user1774433

関連する問題