7

内部サイトの 1 つで NTLM 認証を実装しようとしていますが、すべてが機能しています。私が持っていないパズルの 1 つのピースは、NTLM から情報を取得し、Active Directory で認証する方法です。

これを実装するために使用したNTLMパスワードに使用される暗号化についての適切な説明がありますが、ユーザーのパスワードが有効かどうかを確認する方法がわかりません。

私は ColdFusion を使用していますが、この問題はどの言語 (Java、Python、PHP など) でも解決できます。

編集:

Redhat Enterprise Linux で ColdFusion を使用しています。残念ながら、IIS を使用してこれを管理することはできません。代わりに、サード パーティ製のツールを作成または使用する必要があります。


更新-私はこれを機能させました。これが私がしたことです

samba.orgのJCIFS ライブラリを使用しました。

以下の方法は NTLMv1 でのみ機能し、NTLMv2 では機能しないことに注意してください。NTLMv1 を使用できない場合は、NTLMv2 をサポートしているがオープン ソースではないJespaを試すか、 Kerberos/SPNEGO を使用できます。

ここに私のweb.xmlがあります:

<web-app>
    <display-name>Ntlm</display-name>

    <filter>
        <filter-name>NtlmHttpFilter</filter-name>
        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>

        <init-param>
            <param-name>jcifs.http.domainController</param-name>
            <param-value>dc01.corp.example.com</param-value>
        </init-param>
        <init-param>
            <param-name>jcifs.smb.client.domain</param-name>
            <param-value>CORP.EXAMPLE.COM</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>NtlmHttpFilter</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
</web-app>

これで、一致/admin/*するすべての URL で NTLM 認証が必要になります。

4

7 に答える 7

19

あなたが本当に求めているのは、シングル サインオン (SSO) の実行時に IE やその他の HTTP クライアントから送信された "WWW-Authenticate: NTLM" トークンを検証する方法はありますか? SSO とは、ユーザーが Ctrl-Alt-Del を実行するときにパスワードを「1 回」入力すると、ワークステーションがそのパスワードを記憶し、必要に応じて使用して、ユーザーに再度パスワードを要求することなく、他のリソースに透過的にアクセスすることです。

NTLM と同様に、Kerberos を使用して SSO 認証を実装することもできます。「WWW-Authenticate: Negotiate」ヘッダーが表示されると、IE およびその他のブラウザーは、SPNEGO でラップされた Kerberos および/または NTLM トークンを送信します。これについては後で詳しく説明しますが、最初に質問に答えます。

NTLMSSP パスワードの "応答" (IE や他のブラウザーによって送信された "WWW-Authenticate: NTLM" ヘッダーでエンコードされたものなど) を検証する唯一の方法は、Active Directory ドメインの NETLOGON サービスを使用した NetrLogonSamLogon(Ex) DCERPC 呼び出しを使用することです。対象アカウントの権限である、または権限を持つ「信頼」を持つコントローラー。さらに、NETLOGON 通信を適切に保護するには、セキュア チャネル暗号化を使用する必要があり、Windows Server 2008 以降では必須です。

言うまでもなく、必要な NETLOGON サービス呼び出しを実装するパッケージはほとんどありません。私が知っている唯一のものは次のとおりです。

  1. 窓(もちろん)

  2. Samba - Samba は、必要な NETLOGON サービス呼び出しを含む多数の Windows プロトコルを実装する UNIX 用のソフトウェア プログラムのセットです。実際、Samba 3 には、このための「winbind」と呼ばれる特別なデーモンがあり、PAM や Apache モジュールなどの他のプログラムがインターフェースできる (そしてインターフェースを行う) ことができます。yum install samba-winbindRed Hat システムでは、およびを実行できますyum install mod_auth_ntlm_winbind。しかし、それは簡単な部分です。これらの設定は別の話です。

  3. Jespa - Jespa ( http://www.ioplex.com/jespa.html ) は、必要なすべての NETLOGON サービス呼び出しを実装する 100% Java ライブラリです。また、HTTP サーブレット フィルター、SASL サーバー、JAAS LoginModule などを使用して、さまざまな方法でクライアントを認証するための標準 Java インターフェイスの実装も提供します。

必要な NETLOGON サービス呼び出しを実装せず、最終的に何らかのシナリオで失敗につながる別のことを行う NTLM 認証アクセプターが多数あることに注意してください。たとえば、何年もの間、Java でこれを行う方法は、JCIFS というプロジェクトの NTLM HTTP 認証サーブレット フィルターを使用することでした。しかし、そのフィルターは、長年の「しゃっくりバグ」の原因となってきた中間者手法を使用しており、さらに重要なことに、NTLMv2 をサポートしていません。これらの理由などにより、JCIFS から削除される予定です。意図せずにそのパッケージに触発されたプロジェクトがいくつかありますが、それらも現在同様に運命づけられています. また、Java フォーラムには、ヘッダー トークンをデコードしてドメインとユーザー名を抽出するコード フラグメントが多数投稿されていますが、パスワード応答を実際に検証することはまったくありません。これらのコード フラグメントの 1 つを使用する場合は、ズボンを下ろしたまま歩き回ることができます。

先に触れたように、NTLM は複数の Windows セキュリティ サポート プロバイダー (SSP) の 1 つにすぎません。ダイジェスト SSP、ケルベロス SSP などもあります。ただし、SPNEGO とも呼ばれるネゴシエート SSP は、通常、MS が独自のプロトコル クライアントで使用するプロバイダーです。ネゴシエート SSP は、実際には NTLM SSP または Kerberos SSP のいずれかをネゴシエートするだけです。Kerberos は、サーバーとクライアントの両方がターゲット ドメインにアカウントを持ち、クライアントがドメイン コントローラと十分に通信して Kerberos チケットを取得できる場合にのみ使用できることに注意してください。これらの条件が満たされない場合、NTLM SSP が直接使用されます。したがって、NTLM は決して時代遅れではありません。

最後に、LDAP の「シンプル バインド」をその場しのぎのパスワード検証サービスとして使用することに言及した人もいます。LDAP は実際には認証サービスとして設計されていないため、効率的ではありません。また、LDAP を使用して SSO を実装することもできません。SSO には NTLM または SPNEGO が必要です。NETLOGON または SPNEGO アクセプターが見つかった場合は、代わりにそれを使用する必要があります。

マイク

于 2009-01-21T04:37:37.560 に答える
2

私が理解しているように。
NTLMは、IISに組み込まれている認証方法の1つです。ホストが上記のActiveDirectoryのドメインに登録されている場合は、自動である必要があります。注意すべき点の1つは、ユーザー名は2つの形式のいずれかである必要があるということです。

  • ドメイン\ユーザー名
  • username@domain.tld

別のActiveDirectoryに対抗しようとしている場合は、フォームスタイルの認証といくつかのLDAPコードを使用する必要があります。

IIS統合認証を使用してイントラネットのゼロログインなしを実行しようとしている場合

  • ドメインは、IExブラウザで信頼済みサイトとしてリストされている必要があります
  • または、DNS名の代わりにnetbios名を使用するURLを使用します。
  • Firefoxで動作するためにここを読んでください
于 2008-08-22T12:24:49.097 に答える
2

ApacheのModNTLMソースは、適切なポインタを提供する場合があります。

可能であれば、代わりにKerberosの使用を検討してください。AD に対して Apache を認証でき、NTLM よりもアクティブなプロジェクト スペースです。

于 2008-09-15T15:43:33.927 に答える
1

Firefox で次の手順を実行することにより、Firefox 認証ポップアップを解決できます。

  1. Mozilla Firefox を開く
  2. アドレスバーに about:config と入力します
  3. Search texfield に network.automatic-ntlm-auth.trusted-uris を入力します
  4. 設定名をダブルクリックし、サーバー名を文字列値として入力します
  5. タブを閉じる
  6. Firefox を再起動します。
于 2013-11-08T10:23:22.873 に答える
1

ワッフルをチェックしてください。Win32 API を使用して Java サーバーの SSO を実装します。サーブレット、Tomcat バルブ、Spring-Security、その他のフィルターがあります。

于 2010-07-27T13:46:00.660 に答える
0

うーん、あなたが何を達成しようとしているのかわかりません。

通常、内部サイトにNTLMを実装するのは、IISのWebサイトプロパティの[ディレクトリセキュリティ]タブにある[認証とアクセス制御]の[匿名アクセスを有効にする]のチェックを外すだけです。これがクリアされると、WebアプリケーションユーザーにポップアップNTLMダイアログが表示されます。

ActiveDirectoryとインターフェイスするコードを記述する必要はありません。IISが認証を代行します。

あなたがやろうとしていることについてもっと具体的にできますか?

于 2008-08-22T12:18:25.463 に答える
0

LDAPアカウント(役割)部門などに対して設定されている属性のいくつかを取得したいと思います。

コールドフュージョンについては、http://www.adobe.com/devnet/server_archive/articles/integrating_cf_apps_w_ms_active_directory.htmlを確認してください。

およびcfldapタグhttp://livedocs.adobe.com/coldfusion/6.1/htmldocs/tags-p69.htm#wp1100581

他の言語に関しては-他の言語はそれぞれのAPIでそれを行います

于 2008-08-22T12:25:52.840 に答える