通过远程活动目录验证用户
本文关键字:验证 用户 活动 程活动 | 更新日期: 2023-09-27 18:31:33
我有一个奇怪的场景,希望你们能提供帮助,我需要使用活动目录验证当前登录的用户,如果他们在网络上,这不是问题,但在某些情况下,他们将在另一个网络上(访问客户端),以便他们使用他们需要针对AD验证的软件。
目前我正在使用以下代码,我说这将在本地和远程工作是否正确?如果不是,我如何获取它来验证凭据?
DomainServer = new ActiveDirectory(Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2010, "LDAP://DOMAIN.NAME", "https://exchange.domain.name/ews/exchange.asmx");
DomainServer.connect();
if (!DomainServer.isConnected())
{
domain_errors = "Unable to connect to Active Directory.";
}
class ActiveDirectory
{
private ExchangeService _ExchangeServer;
private DirectoryEntry _searchRoot;
private DirectorySearcher _search;
private SearchResult _searchresult;
private ExchangeVersion _ExchangeVer;
private string _ActiveDirectoryAddress;
private string _ActiveDirectoryURL;
public ActiveDirectory(ExchangeVersion Ver, string ActiveDirectoryAddress, string ActiveDirectoryURL)
{
_ActiveDirectoryURL = ActiveDirectoryURL;
_ActiveDirectoryAddress = ActiveDirectoryAddress;
_ExchangeVer = Ver;
}
public void connect()
{
_ExchangeServer = new ExchangeService(_ExchangeVer);
_ExchangeServer.UseDefaultCredentials = true;
_ExchangeServer.Url = new Uri(_ActiveDirectoryURL);
_ExchangeServer.Timeout = 60;
}
public bool isConnected()
{
if (_searchRoot.Properties.Count > 0){
return true;
} else {
return false;
}
}
}
Windows 在本地
计算机上缓存用户名和密码,以便域用户即使计算机(如便携式计算机)未连接到域也可以登录。 由于Windows本质上是为您处理身份验证,因此您真正需要做的就是授权谁可以使用该软件。 我能想到几种可能性。
首先,在数据库中,您可以维护一个用户表,其中包含有权访问该软件的用户的 SID 和用户名。 当用户执行程序时,请检查当前登录用户的 SID 是否在该表中。 这样,您可以限制哪些用户可以在不连接到 Active Directory 的情况下实际执行软件。 这也允许您在数据库级别撤销访问权限。
其次,数据库服务器是否可以访问活动目录? 如果是这样,请在 AD 中为有权访问此系统的用户创建一个组,然后在数据库中授予该组访问权限。 将数据库连接设置为使用 Windows 身份验证。 因此,如果此人属于该组,则他们有权访问数据库。 否则,他们不会。 然后,您只需在该组中添加或删除它们来控制访问,安全性将在数据库级别进行控制。
第三(我不喜欢这个),如果你有一个Web服务器,运行一个接受用户名和密码的Web服务(当然使用HTTPS),然后使用该Web服务通过防火墙连接并针对AD进行身份验证。 然后,只需将结果返回给应用程序即可。 这在将凭据传递到 Web 服务并通过防火墙打开连接时存在一些安全问题。