9

これらの資格情報を必要とするプロセスを後で実行するには、Windows のユーザー名と資格情報を保存する必要があります。

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

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

誰かが以前にこれを行ったことがある場合、またはそれを行う方法を知っている場合はお知らせください。

ありがとう、ピユシュ

4

1 に答える 1

9

資格情報とは、ユーザーの実際のパスワードを意味しますか? その後、LDAP を使用して Windows Active Directory への接続を試みることができます。関連する質問を参照してください: LDAP による Windows パスワード認証

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

これをより便利なライブラリにラップした「waffle」というプロジェクトがあります。たとえば、https://github.com/dblock/waffle/blob/master/Source/JNA/waffle-jna/src/waffle/の logonUser 関数を参照してください。 windows/auth/impl/WindowsAuthProviderImpl.java . これは、win32 advapi32.dll と直接通信します。

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

編集: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()); 
}
于 2012-10-25T14:55:24.987 に答える