公司用的系统很多要求用域账号来登录,具体实现如下:
using System.DirectoryServices;
public string ValidateDomainUser(string Domain, string UserName, string Password)
{
DirectoryEntry entry = new DirectoryEntry(Domain, UserName, Password);
try
{
string objectSid = (new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0).Value);//如果账号不对则会抛出异常
return objectSid;
}
catch
{
return null;
}
finally
{
entry.Dispose();
}
}
这里的第一个参数是用来初始化DirectoryEntry.Path参数的,CSDN对于此参数的介绍如下:
语法 Path 属性会根据提供程序而不同。 一些常见的情况有:
WinNT
连接到的计算机上的组。 例如,"WinNT:// < 域名 > / < 计算机名 > / < 组名称 >"。 如果要连接到本地计算机上,"WinNT: / /< 计算机名 > / < 组名称 >"。
连接到的计算机上的用户。 例如,"WinNT: / /< 域名 > / < 计算机名 > / < 用户名 >"。 如果要连接到本地计算机上,"WinNT: / /< 计算机名 > / < 用户名 >"。
连接到计算机上的服务。 例如,"WinNT: / /< 域名 > / < 计算机名 > / < 服务名称 >"。 如果要连接到本地计算机上,"WinNT: / /< 计算机名 > / < 服务名称 >"。
发现网络上的所有域。 例如,"WinNT:"域可通过枚举此项的子级。
LDAP
连接到域中的组。 例如,"ldap://cn = < 组名称 >,CN = < 用户 >,DC = < 域组件 >,DC = < 域组件 >,..."。
连接到域中的用户。 例如,"ldap://cn = < 完整的用户名称 >,CN = < 用户 >,DC = < 域组件 >,DC = < 域组件 >,..."。
连接到域中的计算机。 例如,"ldap://cn = < 计算机名 >,CN = < 计算机 >,DC = < 域组件 >,DC = < 域组件 >,..."。
IIS
连接到一个 Web 目录。 例如,"IIS://LocalHost/W3SVC/1/ROOT/ < Web 目录名称 >"。
我用的参数Domain是这样的: "LDAP://xxx.xxxxx.com/DC=xxx,DC=xxxxx,DC=COM";
引用自:https://msdn.microsoft.com/zh-cn/library/system.directoryservices.directoryentry.path(v=vs.110).aspx