web-dev-qa-db-ja.com

Node.jsでNTLM資格情報をKerberosトークンに変換する方法

何らかのプロキシとして機能するNode.jsを使用してサーバーを構築したいと思います。サーバーに接続するクライアントは認証にNTLMv2を使用します(これを変更する機会はありません)が、サーバーが接続する上流のサーバーにはKerberosトークンが必要です。

したがって、私の質問は非常に単純です。Node.jsを使用して、NTLMv2によって提供される情報をKerberosトークンに変換するにはどうすればよいですか。 npmでこれまでにNTLMv2認証のモジュールを見つけましたが、おそらくユーザーのNTLMv2データをこのユーザーのトークンに変換するためにWindowsと通信する必要があるでしょう。

これに関するヒント、この問題へのアプローチ方法は?

17
Golo Roden

絶対違う! NTLMとKerberosの動作は完全に異なります。まず、できるだけ早くNTLMを削除することを強くお勧めします。

Cインターフェイスにアクセスできれば、問題を簡単に解決できます。また、MIT CentOSやFreeBSDなどのUnixライクなOS上のKerberosも想定しています。

NTLMはダウンレベルログオン名を提供します。最初にLDAP経由でNetBIOSドメインをDNSドメインに変換する必要があります(libopenldapを使用)。次に、クライアントのKerberosプリンシパルまたはエンタープライズプリンシパルを構築できます。次に、KDCでサービスアカウントを作成し、ターゲットサービスのそのアカウントでプロトコルの移行と制約付き委任を有効にします。次に、そのユーザープリンシパルに代わってTGTを要求し、ユーザーのサービスチケットを要求します。これで、Kerberosバックエンドにアクセスできます。これはまともな読みです: https://k5wiki.kerberos.org/wiki/Projects/Services4User

HTTPdをリバースプロキシとして実行する場合、mod_auth_gssapiを使用してすべての魔法を処理できます。

Windowsでは、これはセキュリティAPIとSSPIで少し面倒です。主要な変換はWindowsで無料で提供されます。 LsaLogonUserKERB_S4U_LOGONが必要で、そのハンドルを偽装し、SSPIにクレデンシャルハンドルの取得を要求します...

2
Michael-O

KDCが制約付き委任を許可している場合は、中間サーバーを設定して偽装を許可できます。このようにして、1つのメカニズム(この場合はNTLM)でクライアントとのセキュリティコンテキストを確立し、別のメカニズム(Kerberos)でクライアントに代わってバックエンドサーバーと通信できます。詳細については、「制約付き委任」および「プロトコル移行」のGoogle。お役に立てれば。

2
speedogoo