ユーザーがイントラネットWebアプリに透過的にログインすることにより、Active DirectoryでのSSOはどのように機能しますか?


40

ログインを必要としないWebアプリケーションを作成できると言われています。ユーザーはWindowsにログインし、WindowsはActive Directory(LDAP)ルックアップを介して認証します。そうすれば、彼らは私のwebappにアクセスでき、ログインプロンプトが表示されないはずです。これらの顧客は、これをシングルサインオンと呼んでいます(おそらく間違っており、私の混乱の一部です)。

しかし、Tomcat DocsからSingle Sign Onを読んだのは次のとおりです。

シングルサインオンバルブは、仮想ホストに関連付けられたWebアプリケーションのいずれかにユーザーがサインオンし、同じ仮想ホスト上の他のすべてのWebアプリケーションでそのIDを認識できるようにする場合に使用します。

これは私には完全に明らかです。ユーザーは1回ログインする必要があり、tomcatのインスタンス上のすべてのwebappにアクセスできます。しかし、私がやらなければならないことは、なんらかの形でTomcatサーバーに資格情報を提供せずにログインさせることです。

だから、これが機能するために私は想像する:

  • ユーザーがページをリクエストします
  • サーバーはセッショントークンを認識せず、クライアントに資格情報を要求します。
  • ユーザーの介入なしのクライアントブラウザは、サーバーに資格情報を提供します。
  • 次に、クライアントブラウザによって提供されたこれらの資格情報を使用して、LDAPでルックアップを実行します。

私は、クライアント側の証明書...このような場合にあなたがいるので、私にいくつかの理にかなって、特に国防総省PKIシステムを使用いくつかの例を見てきた要求クライアント側の本命にTomcatを設定し、私はどのようにこれを見ていない窓に、ちょうどログインを動作し、ブラウザがサーバーに渡す情報など。これはNTLMの使用目的ですか?

回答:


40

まず、他のユーザーがこのページにアクセスした場合に備えて、特定の認証方法のみがあり、プロンプトレスSSOを実行できます。これらはNTLMKerberosです。一方、LDAPは決してプロンプトなしのSSOを提供しません。

NTLMは、実際にはNTLMv1およびNTLMv2です。これらは非常に異なり、NTLMv1は深刻なセキュリティ問題のために非推奨です。ドキュメントで「NTLM」という単語しか使用していないため、NTLMv1またはNTLMv2をサポートしているかどうかを正しく識別できないJava認証ソリューションは避けてください。おそらく、セキュリティソリューションの開発者は自分自身を知らないため、ファイアエスケープを探すより多くの理由になります。

従来の考えに反して、NTLMv1とNTLMv2の両方はMicrosoftによって完全に文書化されていますが、プロトコルを「リバースエンジニアリング」したと主張するソリューションを見つけることができます。マイクロソフトが2006年または2007年頃に信じているプロトコルを文書化する前にこれが必要だったことは事実です。とにかくNTLMv1はノーです。NTLMv2自体には何の問題もありませんが、MicrosoftはKerberos認証を支持して、すべての製品でNTLMを(あらゆる形式で)段階的に廃止しています。NTLMv1は長い間使用されておらず、現在NTLMv2は、ドメインコントローラが利用できない場合にのみMicrosoftによって使用されています。結論:NTLM(いずれの形式でも)は実際には前進していません。ここでは、標準ベースのアプローチを採用しているマイクロソフトに実際に敬意を表すべきです。

これにより、Kerberosが残ります。Microsoftは、HTTPを介して認証情報をネゴシエートおよび転送するためのプロトコルを作成しました。これは、Microsoft製品では「統合Windows認証」として知られていますが、SPNEGOという名前で公式の標準として明確にされています。これがあなたが探しているものです。SPNEGOは、基礎となる認証メカニズムとしてNTLMv2とKerberosの両方をサポートしていますが、上記の理由から、NTLMv2ではなくKerberosをターゲットにする必要があります。

SourceForgeのSPNEGOプロジェクトを使用して、いくつかのTomcatアプリケーション(Linux / Solaris上で実行)をActive Directoryと正常に統合しました。これが最も簡単なアプローチであることがわかりました。これにより、たとえばSharepointサーバーが行うのと同様のプロンプトレスSSOが提供されます。これはおそらく、ユーザーが「SSO」について話すときに期待するものです。Active DirectoryでKerberos構成を適切に取得し、キーを生成し、「ダミー」アカウントを設定するのは面倒ですが、一度適切に設定すれば魅力のように機能します。

SourceForgeSPNEGOプロジェクトについて私が気に入らない唯一のことは、認証を実行する頻度がわからないことです。私の厄介な疑いは、セッションごとに1回ではなく、ページビューごとにそれを行うことです。おそらく私はこれで間違っています。とにかく、これはSSOソリューションで考慮すべきもう1つのことを強調しています。不要な要求でIDプロバイダー(たとえば、Active Directory)を「スパム」するソリューションを実装する必要はありません。


2
ありがとう、これを受け入れられた答えにした。プロンプトレスログインのリストに追加する1つのことは、x509証明書ログインです...政府CACカードのように。
blak3r

これは、6歳であっても素晴らしい答えです!できればx10に投票します!
ティムS.

2

Windows Active Directory環境では、シングルサインオンを使用して、内部WebページにアクセスするとWindowsログイン権限が付与され、Webサーバーはそれらにアクセスできます。NTLMが使用されるものですが、新しい実装では代わりにKerberosが使用されます。

Sharepoint Server Webサイトを開くと、ログインユーザー名とパスワードを必要とせずに自分が誰であるかがわかりますが、これは同じネットワーク上の内部Webサイトでのみ機能します。公開Webサイトで機能することはあまり意味がないと思います。(Apache vhostのように「仮想ホスト」を意味するのか、外部委託されたホストサーバーのように意味するのかわかりません)。

IIS / ASP.Netを実行しているWebサーバーに対してKerberos認証がどのように機能するかを説明したMicrosoftのドキュメントは次のとおりです。http://msdn.microsoft.com/en-us/library/ff647076.aspx

Apache / Tomcat / Javaでできるように見えます。ここではその年のイギリス大学の実装を記述したPDFです:http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdfとそれのためのCodePlexプロジェクト:http://tomcatspnego.codeplex.com/とOpenfireは、いくつかを持っていますここでJava / Kerberosを一般的に使用するためのドキュメント(http://community.igniterealtime.org/docs/DOC-1060)。


0

マイクロソフトが統合Windows認証と呼んでいるものを説明しているように聞こえますか。

この記事に基づいて、TomcatはWindows認証をサポートしているようです。


-1

まず、ログインを避けることはできません。ユーザーを特定したい場合は、ログインさせる必要があります。NTLMを忘れて、Kerberosが助けになります-完全に透過的な方法ですべてを行うことができます。

SingleSignOnValveは、あなたが探しているものではありません。Tomcat 7を使用する場合、SpnegoAuthenticatorをすぐに使用できますが、6ではこれを使用する必要があります。


少し混乱しています...最初と2番目の文は矛盾しているようです。Kerberosを使用すると、ユーザーはログインを求められませんか?
blak3r

1
いいえ、そうではありません。全体像をご覧ください。Kerberosのおかげで、ユーザーは資格情報手動で1回入力し、その後はすべてのログインが自動的に行われます。これは、ログインがまったく行われないという意味ではありません。これはあなたが書いたものです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.