作为前言,我有一个客户端和一个服务器程序,客户端通过SSL连接到服务器。
我正在寻找一种方法,使用Active Directory验证通过SSL隧道传递给服务器的PrincipalContext
或UserPrinicpal
。这是为了验证客户端的身份。有谁知道我会怎么做呢?
或者,是否有人知道这样做的不同/更简单的方法?
注意:如果您想使用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。