2

NTLMv2 を使用して (XML を返す) アプリケーションへの単純な URL を呼び出すことに関して、誰かが私の素朴さを正してくれることを願っています。

そこにあるほとんどすべての質問とページを読みましたが、1つの優先的な好奇心が残っています. 現在、HTTPClient を (これは変更可能ですが) 最新の JDK (執筆時点) と共に使用しています。

以下は、JCIFS ライブラリを呼び出しているように見えるページの例です: http://hc.apache.org/httpcomponents-client-ga/ntlm.html

紛らわしいかもしれませんが、すべて問題ないように見えますが、これは、私が見た多くの例が提起する問題、つまり NTCredentials の提供の問題を浮き彫りにしています。

私にとって NTLM の要点は、資格情報を提供する必要がないようにすることです。ターゲット アプリケーションは NTLM を使用するように設定されているため、現在ログインしているユーザーのユーザー資格情報を使用する必要がありますか? 資格情報を自分で提供する必要があるのはなぜですか?

ここで明らかな何かが欠けている場合はお詫び申し上げます。Javaを使用して可能なNTLM SSOの最も基本的なものが必要です。何のバージョンでも構いません。何でも最新のものを使用できます。

希望を抱きしめて!読んでくれてありがとう。

4

1 に答える 1

0

残念ながら、純粋な Java 環境でシングル サインオンを行う方法があります。

NTLM は、シングル サインオンを直接行うためのソリューションではありません。NTLM はチャレンジ/レスポンス認証メカニズムであり、ユーザーのパスワードの NTLM ハッシュが必要です。NTLM ハッシュが保持されるため、Windows マシンは NTLM を使用してシングル サインオンを提供できます。その後、永続化されたハッシュに基づいて、チャレンジへの応答を計算できます。

そのハッシュにアクセスできない場合 (そして、私の知る限り、単純に要求することはできません)、自分で計算する必要があります。そして、それにはユーザーのパスワードが必要です。

同様に、SPNEGO 認証を使用して Kerberos チケットでシングル サインオンを実行できます (もちろん、リモート システムがそれをサポートするようにセットアップされている場合) が、Java は残念ながら、システムの Kerberos ライブラリを使用する代わりに Kerberos を再実装しました。そのため、すでにドメインにログインしていたとしても、Java 用の別の Kerberos チケットを取得する必要があります。これは、パスワードをもう一度入力することを意味します。

認証のためにパスワードの入力を避ける唯一の現実的な方法は、ネイティブ メソッドを呼び出すことです。Windows では、これはSSPIであり、NTLM または SPNEGO チャレンジに応答する機能を提供します。Windows 以外のプラットフォームでは、これは非常によく似たGSSAPIによって処理され、 SPNEGO (Kerberos) に応答する機能を提供します。

于 2013-02-15T18:04:22.783 に答える