如何在Powershell中安全地对AD用户进行身份验证(加密凭据)



我的应用程序要求用户通过Active Directory身份验证。我们正在考虑使用System.DirectoryServices.DirectoryEntry执行PowerShell脚本,并将用户名和密码传递给该脚本。

我看到它在另一个答案中提到,System.DirectoryServices.DirectoryEntry使用LDAP读取AD信息。LDAP协议本身未加密。你可以使用LDAPS,但这需要设置CA。我想知道这个命令生成的网络流量在默认情况下是否安全,也就是说,密码是否可以在网络上被嗅探?

编辑我发现您可以将其他选项传递给DirectoryEntry实例。这是示例代码:

$username = $args[0]
$password = $args[1]
Function Test-ADAuthentication {
param($username,$password)
(new-object directoryservices.directoryentry "",$username,$password,Secure -bor Sealing).psbase.name -ne $null
}
Test-ADAuthentication $username $password

第四个参数是枚举AuthenticationTypeshttp://msdn.microsoft.com/en-us/library/system.directoryservices.authenticationtypes(v=vs.90).aspx

似乎感兴趣的价值观是:安全&组合密封将加密凭证

非常感谢您的阅读。

这是我发现的在Powershell脚本中向AD验证用户身份的最佳解决方案。根据MS文档,协商和密封标志将对数据进行加密:http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.contextoptions(v=vs.110).aspx

$username = $args[0]
$password = $args[1]
$pc = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext 'Domain', $system.Domain
return $pc.ValidateCredentials($username, $password, [DirectoryServices.AccountManagement.ContextOptions]::Negotiate -bor [DirectoryServices.AccountManagement.ContextOptions]::Sealing)

如果我没记错,就不可能以未加密的方式对Active Directory进行身份验证。每个域控制器在接受凭据之前都会与客户端建立某种加密连接。

Powershell使用与其他客户端相同的方法对DC进行身份验证。也就是说,无论您是在Windows 8登录屏幕、Sharepoint页面、定制程序还是Powershell提示符下输入凭据,DC都将以相同的方式进行身份验证。您可以通过组策略修改AD的身份验证机制,但每个机制都会对数据进行加密。

在几分钟的谷歌搜索中,我没有找到太多文档,但这篇来自华盛顿大学的文章对LDAP以及LDAP与AD的关系有一个很好的概述。跳到"Active Directory支持四种SASL身份验证机制"这一行

http://www.netid.washington.edu/documentation/ldapAuth.aspx

此外,GPO的两个链接与登录安全性有关。与您的问题直接相关,但它们可能很方便:http://technet.microsoft.com/en-us/library/dn169021%28v=ws.10%29.aspxhttp://technet.microsoft.com/en-us/library/jj852258%28v=ws.10%29.aspx

最新更新