编写一个 C#、Core 2.1、自托管 Web API 来建立Identy Sewrver 4
实例...
尝试对(临时(用户和角色存储使用 LDAP。然而,当我运行我正在处理的 STS 时,当我查询 LDAP 时,我不断收到"密码错误"错误。我正在我的笔记本电脑上工作(在工作组中(,正在 Hyper-V(域(中运行 DC。
我正在尝试使用System.DirectoryServices.AccountManagement
并具有简单的搜索设置,如下所示:
// Pass in userName as someone@domain.xyz
// Example: userName = keith@sol3.net
// Domain Controller is found at dc01.sol3.net
public static bool CanSignIn(string userName, string domainName)
{
using (var pc = new PrincipalContext(ContextType.Domain, domainName))
{
UserPrincipal user = null;
try
{
var name = userName.Split('@');
user = UserPrincipal.FindByIdentity(pc, IdentityType.Name, name[0]);
}
catch (Exception ex)
{
Log.Warning(ex, $"Could not find {userName} in Active Directory, Domain: {domainName}!");
}
return user != null;
}
}
我想知道是否:
- 我需要将笔记本电脑连接到域?
- 使用红隼是干扰吗?
- 我应该在 IIS 快速模式下运行吗?
- 我应该研究如何在HTTP.SYS下运行吗?
- 什么路径会在这里有所帮助?
蒂亚
我认为您需要使用密码手动进行身份验证才能查询目录。使用您在问题中详细介绍的方法,调用应用程序无法识别自身。如果您希望应用程序独立于域运行(即不必在加入域的服务器上以域用户身份运行(,那么最好的方法是使用原始 LdapConnection 并将用户名/密码 NetworkCredential 绑定到它。
此示例使用预配置的服务帐户通过用户的主电子邮件地址查询用户:
var connection = new LdapConnection(ldapServerName);
connection.AuthType = AuthType.Basic;
//Additional connection setup omitted for brevity
connection.Bind(new NetworkCredential(serviceUserName, servicePassword));
var request = new SearchRequest(
baseDistinguishedName,
"(&(objectClass=person)(mail=" + EscapeFilterValue(emailAddress) + "))",
System.DirectoryServices.Protocols.SearchScope.Subtree,
null
);
SearchResponse response = (SearchResponse)_connection.SendRequest(request);