Giả sử tôi có một đối tượng PSCrendential
trong PowerShell mà tôi đã tạo bằng cách sử dụng Get-Credential
.Xác thực PowerShell PSCredential
Làm cách nào để xác thực đầu vào đối với Active Directory?
Bởi bây giờ tôi tìm thấy con đường này, nhưng tôi cảm thấy đó là một chút xấu xí:
[void][System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement")
function Validate-Credentials([System.Management.Automation.PSCredential]$credentials)
{
$pctx = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Domain, "domain")
$nc = $credentials.GetNetworkCredential()
return $pctx.ValidateCredentials($nc.UserName, $nc.Password)
}
$credentials = Get-Credential
Validate-Credentials $credentials
[Chỉnh sửa, hai năm sau] Đối với độc giả trong tương lai, xin lưu ý rằng Test-Credential
hoặc Test-PSCredential
là những cái tên tốt hơn, bởi vì Validate
không phải là một động từ PowerShell hợp lệ (xem Get-Verb
)
Tôi hiểu rằng PSCredentials là nhà cung cấp chứng thực bất khả tri (đó là cơ bản một container đơn giản cho tên người dùng/mật khẩu), nhưng yêu cầu này âm thanh rất phổ biến đối với tôi. –
@SteveB Đó là một nhiệm vụ thực sự phổ biến cho sysadmin và developper đặc biệt là đối với những người làm việc trong AD đó là lý do tại sao (IMO) microsoft làm AccountManagement. Ở đây bạn có thể thấy nhiều cách khác nhau được sử dụng trong C# để thực hiện tác vụ này: http://stackoverflow.com/questions/290548/c-sharp-validate-a-username-and-password-against-active-directory –
Thực tế , các phương pháp hay nhất về phát triển chung áp dụng ở đây. Đặc biệt tôi có thể che giấu sự phức tạp trong chức năng này và sau đó chỉ cần gọi hàm :) –