デスクトップにJavaアプリケーションにActive Directoryユーザーに関連するシングルサインオンを持たせたい。2つのステップで、次のことを行いたい:
Java:現在のWindowsユーザーを判別するプログラムによる方法 を使用すると、現在のWindowsユーザーの名前を取得できますが、これに依存できますか?私は思います
System.getProperty("user.name")
十分に安全ではありませんか? (「user.name」は環境変数から取得されているようなので、信頼できないと思いますか?)
質問 Java Linuxの場合)でのActive Directoryに対する認証 は、指定された名前+パスの認証を提供しますが、Windowsログオンに基づいて認証したいですか?
Active Directoryアクセスの場合、LDAPがおそらく選択でしょうか?
サポートされていません。 Java 6は改善されていますが、まだ十分ではありません。
Javaには独自のGSSスタックがあります。問題はシングルサインオンに関するものであり、OSからKerberosチケットを取得する必要があります(Javaスタックではありません)。それ以外の場合、ユーザーはもう一度認証する必要があります(シングルの目的を無効にする)入社する)。
http://Java.Sun.com/developer/technicalArticles/J2SE/security/ を見てください。 「Access Native GSS-API」を探してください。trueに設定すると、Javaが基になるOS GSS実装を使用し、次のようになります。新しいシステムプロパティSun.security.jgss.nativeについて話します。 OSレベル認証へのアクセスパーフェクト!.... Microsoft Windowsではなく、SolarisとLinuxでのみサポートされています。
ただし、Java 6は、IEからSPNEGO認証リクエストを受信し、認証するserverとして機能するための十分なサポートがあるようです)そのユーザーをActive Directoryに対して実行します。デスクトップクライアントのサポートは、まだ完全ではありません。
[〜#〜] jaas [〜#〜] を LDAP LoginModule とともに使用します。これにより、基盤となるJavaセキュリティインフラストラクチャにプラグインできます。
アプリをオフラインにするか、アプリを「デバッグ」する必要がある場合は、LDAPモジュールをダミーモジュールに簡単に交換できます。これにより、Active Directoryに依存することなく、「セキュリティ」のテストを継続できます。高度にテスト可能で、分離されており、認証スキームを後で悲惨なことなく行うことができます。
プロジェクト Waffle には、WindowsでSSOを実行するクライアント側とサーバー側の両方のコードがあります。これはJNAベースで、ネイティブライブラリは必要ありません。
JNA APIの使用を検討しましたか(オペレーティングシステムへのネイティブコールを簡単に実行できます)?
http://msdn.Microsoft.com/en-us/library/ms724432(VS.85).aspx でwin32 metod GetCurrentUser
MSDNドキュメントを呼び出すことができます。 Advapi32.dll内にあります。
また、Unicodeバージョン、必要に応じてGetCurrentUserWもあります。
そして、あなたは正しいです。環境変数が変更される可能性があるため、誤解を招く可能性があります。
32/64ビットウィンドウでのクロスプラットフォームの影響についてはよくわかりません。コードでソリューションが必要な場合は、私はそれのために何かを書くことができると確信しています。
しかし、いや、ただのアイデア:)
Spring Security を使用すると、おそらく最も柔軟性が得られます。 JAAS認証とLDAP認証の両方で使用できます。
http://jcifs.samba.org/ でjCifsを確認してください
それ以外は、LDAPを使います(実際には、最初の試みですが...)