c# - 通过安全 LDAP 以编程方式创建 AD 帐户
问题描述
目前,我正在使用 PrincipalContext 通过 LDAP 连接通过 C# 成功创建 AD 帐户。我创建了一个新的 UserPrincipal,根据需要应用各种属性并调用 save()
基本上是这样的
using(var pc = new PrincipalContext(ContextType.Domain))
{
using(var up = new UserPrincipal(pc))
{
up.SamAccountName = "whatever";
up.EmailAddress = "test@example.com";
up.SetPassword(password);
up.Enabled = true;
up.Save();
}
}
一切正常,但现在我们需要通过安全的 LDAP 连接做同样的事情,我正在努力在网上找到任何关于如何做到这一点的细节的信息。这让我觉得可能与我目前的做法没有什么不同,相反,我需要做的只是确保服务器支持 LDAPS 并配置为使用它。
也许 SO 是错误的论坛,如果是这样,我很高兴将问题转移到不同的论坛。
解决方案
LDAP 的默认 TCP 端口是 389。如果您不另行说明,则使用该端口。要使用 LDAPS,您必须指定 LDAPS 端口 636。例如:
using(var pc = new PrincipalContext(ContextType.Domain, "example.com:636"))
example.com
你的域名在哪里。
但是,使用 LDAPS 要求您的计算机信任服务器使用的 SSL 证书。有时会使用自签名证书,这会导致失败。PrincipalContext
不报告证书错误。它报告它好像无法联系服务器。因此,如果您在那里遇到问题,可以使用此 PowerShell 脚本下载证书并进行检查:
$webRequest = [Net.WebRequest]::Create("https://example.com:636")
try { $webRequest.GetResponse() } catch {}
$cert = $webRequest.ServicePoint.Certificate
$bytes = $cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert)
set-content -value $bytes -encoding byte -path "certificate.cer"
将第一行更改为您的域名。如果可行,将有一个名为的文件certificate.cer
,您可以双击并检查它。如果您的计算机不信任它,您将看到这样的消息。如果这是一个问题,您可能只需要在您的计算机上安装根证书作为“受信任的根证书”。
推荐阅读
- python - 有没有办法使用 os 库获取当前操作系统的目录分隔符?
- ios - Bundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer") == nil
- python - 将字典值映射到数据框时出错
- c++ - 找不到最大乘积子数组的范围
- java - Weblogic 订阅者多个 URL
- c# - 为什么在 C# 中定义属性的两种方式会产生不同的结果?
- authorization - 可以将 access_token 权限添加到 OAuth2LoginAuthenticationToken 吗?
- node.js - Firestore-Cloud Functions 获取顶层文件名
- html - 菜单栏未出现在移动布局的菜单按钮中
- flutter - Flutter 键盘检测可见性