Mono.Security.Protocol.Ntlm名前空間(Mono.Security.dll)には、NTLM認証(NT LAN Manager Authentication)で用いられるNTLMメッセージを抽象化したクラスが用意されている。
- class Type1Message
- NTLM認証におけるネゴシエーションメッセージ(Type 1 Message)を抽象化したクラス。 クライアントがサーバに要求する機能等を含むメッセージを表す。
- class Type2Message
- NTLM認証におけるチャレンジメッセージ(Type 2 Message)を抽象化したクラス。 ネゴシエーションメッセージに対する応答、サーバが生成したnonce等を含むチャレンジを表す。
- class Type3Message
- NTLM認証における認証メッセージ(Type 3 Message)を抽象化したクラス。 ユーザ名・パスワードを含む、チャンレンジに対する応答を表す。
- abstract class MessageBase
- Type1Message, Type2Message, Type3Messageの基底クラス。
- enum NtlmFlags
- 各メッセージのヘッダに含まれるNTLMフラグを表す列挙体。 クライアントがサーバに要求する機能や、サーバがサポートする機能などを表す。
これらのクラスはSystem.Net.WebRequest等でHTTPにおけるNTLM認証を行うために用いられているが、IMAPにおけるAUTHENTICATEコマンドでの認証にも使用できる(IMAPの他、POP、SMTP等その他のプロトコルでも使用できると思われる)。
IMAPでのNTLM認証
IMAP AUTHENTICATEコマンドによるNTLM認証の手続きは次のようになる。
クライアント側でのNTLM認証の実装イメージは次のようになる。
以下は上記実装イメージに基づく実装でNTLM認証を行った場合のログ。 テストに使ったサーバはDovecot 1.2 rc3、認証に用いた値はhost = "localhost", domain = "localdomain", username = "user", password = "pass"。
NTML認証に関するドキュメント
- [MS-NLMP]: NT LAN Manager (NTLM) Authentication Protocol Specification NTLMの認証プロトコル仕様
- Microsoft Open Specification Support Team Blog : NTLM Overview NTLM認証の概要
- The NTLM Authentication Protocol and Security Support Provider "Sambaにおける実装の解析に基づいた"NTLM認証のリファレンス
- NTLM 認証プロトコルとセキュリティサポートプロバイダ 上記リファレンスの和訳