Trên thực tế, tôi đang gỡ lỗi ứng dụng C# nhưng vì có thể thực hiện cùng một lệnh trong PowerShell nên tôi đang thử ở đó.
Tôi đang cố xác thực tài khoản người dùng bằng cách sử dụng thông tin sau trong PowerShell:
> Add-Type -AssemblyName System.DirectoryServices.AccountManagement
> $ds = Đối tượng mới System.DirectoryServices.AccountManagement.PrincipalContext("miền", "<miền>", "<OuDN>", "thương lượng", "<tên người dùng>", "<mật khẩu>")
> $ds.ValidateCredentials("<tên người dùng>", "<mật khẩu>", "thương lượng")
Lệnh cuối cùng luôn trả về false, tôi đã xác minh thông tin đăng nhập là chính xác bằng cách đăng nhập bằng chúng. Chúng tôi đã bật xác thực NTLM trong môi trường và tôi có thể thấy mỗi khi tôi thực thi Xác thực thông tin xác thực ()
kết nối NTLM bởi lsass.exe bị chặn (ID sự kiện 4002 trong trình xem sự kiện). Tôi đã bật ghi nhật ký Kerberos nhưng không có sự kiện nào được tạo trong trình xem sự kiện khi cố gắng xác thực. Điều này khiến tôi tin rằng nó thậm chí không thử xác thực Kerberos, nhưng tôi có thể sai ở đây.
Tôi đã xác minh rằng SPN cho máy tính tồn tại với setspn -L
và vì xác thực Curb hoạt động ở mọi nơi khác trong hệ thống nên tôi không chắc đó là cấu hình sai.
Cập nhật:
Tôi đã tìm thấy một giải pháp nhưng chưa đăng nó dưới dạng câu trả lời vì tôi vẫn có một số hành vi kỳ lạ. Tôi đã thêm @<tên miền>
thành tên người dùng và điều này hoạt động trong ứng dụng C# mà tôi đang gỡ lỗi, nhưng chạy chính xác lệnh tương tự trong PowerShell vẫn trả về false, mặc dù bây giờ tôi nhận được KDC_ERR_PRAUTH_FAILED
trong trình xem sự kiện.