LDAP 查询、Core 2.x、IdSvr、自托管



编写一个 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);

相关内容

  • 没有找到相关文章

最新更新