実際には C# アプリをデバッグしていますが、同じコマンドが PowerShell でも可能なので、そこで試しています。
PowerShell で以下を使用してユーザー アカウントを検証しようとしています:
> Add-Type -AssemblyName System.DirectoryServices.AccountManagement
> $ds = New-Object System.DirectoryServices.AccountManagement.PrincipalContext("domain", "<domain>", "<OuDN>", "negotiate", "<username>", "<password>")
> $ds.ValidateCredentials("<username>", "<password>", "negotiate")
最後のコマンドは常に false を返します。資格情報を使用してログインすることで、資格情報が正しいことを確認しました。環境で NTLM 認証をオフにしましたが、実行するたびにValidateCredentials()
lsass.exe による NTLM 接続がブロックされていることがわかります (イベント ビューアーのイベント ID 4002)。Kerberos ログをオンにしましたが、検証しようとしてもイベント ビューアーにイベントが生成されません。このため、Kerberos 認証すら試行されていないと確信していますが、間違っている可能性があります。
コンピューターの SPN が存在することを確認しましたsetspn -L
。また、Kerb 認証はシステムの他のすべての場所で機能するため、構成ミスであるかどうかはわかりません。
アップデート:
解決策は見つかりましたが、まだ奇妙な動作が残っているため、回答として投稿していません。@<domain>
ユーザー名に追加しましたが、デバッグ中の C# アプリでは動作しますが、PowerShell でまったく同じコマンドを実行しても false が返されます。ただし、KDC_ERR_PREAUTH_FAILED
イベント ビューアーには が表示されます。