使用 C# 连接活动目录
connect active directory using c#
我正在尝试连接到我使用过的 Active Directory 代码
string domain = "domain.com.pk";
string container = "DC=mycompnay,DC=com,DC=pk";
string Admin = "salman.zafar";
string Password = "password";
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, container, Admin, Password))
{
string userPrincipalName = "dotnettest" + "@" + domain;
// validate the credentials
bool isValid = pc.ValidateCredentials(userPrincipalName, "Ascertia 12");
if (isValid) {
UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.UserPrincipalName, userPrincipalName);
}
当域中的机器上的代码 运行 时,代码工作正常,但如果我尝试连接到远程的 AD 机器,则会出现错误
我尝试使用
string domain = "192.168.0.150:389/domain.com.pk";
然后它不起作用并且始终验证凭据方法 return false 有人可以帮助我如何使用带端口的 IP 和 PrincipalContext[=21= 连接到远程活动目录] 或者我必须使用目录条目
任何帮助将不胜感激
第一个注释:
code works fine when the code running on machine which is in domain
在这种情况下,如果机器是域成员(我在这里假设),则不需要在 PrincipalContext
构造函数中提供 adminuser+pw。
如果你想连接到外部域和当前域之间不信任的任何其他 AD 服务器(域控制器),请使用 IP 地址或服务器名称作为 "domain" 名称:
string domain = "192.168.0.150";
如果您的目标只是检查凭据是否有效,您甚至可以省略管理员用户 + pw:
string domainController = "192.168.0.150";
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainController))
{
string userPrincipalName = "dotnettest" + "@" + domain;
// validate the credentials
bool isValid = pc.ValidateCredentials(userPrincipalName, "Ascertia 12");
}
然而,在这种情况下,您不能
UserPrincipal up = UserPrincipal.FindByIdentity(...
因为 PrincipalContext 本身没有登录。
你也可以在类似的问题中看到我的回答:
或这篇 SO 文章 Validate a username and password against Active Directory?
我正在尝试连接到我使用过的 Active Directory 代码
string domain = "domain.com.pk";
string container = "DC=mycompnay,DC=com,DC=pk";
string Admin = "salman.zafar";
string Password = "password";
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain, container, Admin, Password))
{
string userPrincipalName = "dotnettest" + "@" + domain;
// validate the credentials
bool isValid = pc.ValidateCredentials(userPrincipalName, "Ascertia 12");
if (isValid) {
UserPrincipal up = UserPrincipal.FindByIdentity(pc, IdentityType.UserPrincipalName, userPrincipalName);
}
当域中的机器上的代码 运行 时,代码工作正常,但如果我尝试连接到远程的 AD 机器,则会出现错误 我尝试使用
string domain = "192.168.0.150:389/domain.com.pk";
然后它不起作用并且始终验证凭据方法 return false 有人可以帮助我如何使用带端口的 IP 和 PrincipalContext[=21= 连接到远程活动目录] 或者我必须使用目录条目
任何帮助将不胜感激
第一个注释:
code works fine when the code running on machine which is in domain
在这种情况下,如果机器是域成员(我在这里假设),则不需要在 PrincipalContext
构造函数中提供 adminuser+pw。
如果你想连接到外部域和当前域之间不信任的任何其他 AD 服务器(域控制器),请使用 IP 地址或服务器名称作为 "domain" 名称:
string domain = "192.168.0.150";
如果您的目标只是检查凭据是否有效,您甚至可以省略管理员用户 + pw:
string domainController = "192.168.0.150";
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainController))
{
string userPrincipalName = "dotnettest" + "@" + domain;
// validate the credentials
bool isValid = pc.ValidateCredentials(userPrincipalName, "Ascertia 12");
}
然而,在这种情况下,您不能
UserPrincipal up = UserPrincipal.FindByIdentity(...
因为 PrincipalContext 本身没有登录。
你也可以在类似的问题中看到我的回答:
或这篇 SO 文章 Validate a username and password against Active Directory?