在服务器端连接上验证AD用户PrincipalContext

时间:2018-02-27 18:26:58

标签: c# ssl active-directory

作为前言,我有一个客户端和一个服务器程序,客户端通过SSL连接到服务器。

我正在寻找一种方法,通过SSL隧道验证通过Active Directory传递给服务器的PrincipalContextUserPrinicpal。这是为了验证客户端的身份。有谁知道我会怎么做呢?

或者,有没有人知道这样做的另一种/更简单的方式?

1 个答案:

答案 0 :(得分:1)

注意:如果您想使用LDAP对用户进行身份验证,那么此处已经回答了"Validate a username and password against Active Directory?"的方法。

根据您的问题我可以理解,您只想搜索用户是否存在于AD中。

根据我的假设,我在C# PrincipalContext only changes password for some users, not all上给出了类似的答案,但这是你所需要的一步。该答案的子集将回答您的问题。

示例代码:

     try
        {    // assuming _userID is the user-id to be checked in AD.
            PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, "domain.name", "DC=domain,DC=name", ContextOptions.SimpleBind, "bindUserID", "bindPassword");
            UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, _userID);
              if(null != oUserPrincipal){
              // user-id found and valid, continue further.
              // If you want to authenticate user, go as per NOTE section in my answer instead.
              }
             else{
              // return the message that the user-id could not be found.
              // preferably the user-id should be **SamAccountName**
              }
        }
        catch (Exception e)
        {
            message = e.ToString();
        }

编辑(根据您的评论):

  

J. Doe - >尽管这可能让我感到不安......它将成为一名经纪人   在DMZ和内部网络上的客户端之间。

您似乎正在寻找像ADFS这样的东西。 Read more about ADFS from MSDN