我的应用程序要求用户针对Active Directory进行身份验证。我们正在考虑使用System.DirectoryServices.DirectoryEntry执行PowerShell脚本,我们将用户名和密码传递给它。
我看到它在一个不同的答案中提到了System.DirectoryServices.DirectoryEntry使用LDAP来读取AD信息的事实。 LDAP协议本身未加密。您可以使用LDAPS,但这需要设置CA.我想知道这个命令产生的网络流量是否在默认情况下是安全的 - 即密码是否可以通过网络嗅探?
EDIT 我发现您可以将其他选项传递给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
第四个参数是枚举AuthenticationTypes http://msdn.microsoft.com/en-us/library/system.directoryservices.authenticationtypes(v=vs.90).aspx
值得关注的值是:安全&密封组合将加密凭证
非常感谢您阅读。
答案 0 :(得分:2)
这是我在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)
答案 1 :(得分:0)
如果我没记错的话,就无法以未加密的方式对Active Directory进行身份验证。每个域控制器在接受凭据之前都会与客户端建立某种加密连接。
Powershell使用与其他客户端使用的相同方法对DC进行身份验证。也就是说,无论您是在Windows 8登录屏幕,Sharepoint页面,自定义程序还是Powershell提示符下输入凭据,DC都将以相同方式进行身份验证。您可以通过组策略修改AD的身份验证机制,但每种机制都会对数据进行加密。
我在谷歌搜索的几分钟内没有找到太多文档,但是华盛顿大学的这篇文章对LDAP的总体概况和与AD相关的LDAP有很好的概述。跳到阅读“Active Directory支持四种SASL身份验证机制”的行
http://www.netid.washington.edu/documentation/ldapAuth.aspx
此外,GPO的两个链接与登录安全性相关。 Tangientially与你的问题有关,但它们可能很方便: http://technet.microsoft.com/en-us/library/dn169021%28v=ws.10%29.aspx http://technet.microsoft.com/en-us/library/jj852258%28v=ws.10%29.aspx