我有一个奇怪的场景,我希望你们可以提供帮助,我需要用活动目录验证当前登录的用户,如果他们在网络上这不是问题,但在某些情况下他们会在另一个网络(访问客户),以便他们使用他们需要的软件来验证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;
}
}
}
答案 0 :(得分:0)
Windows在本地计算机上缓存用户名和密码,以便即使计算机(例如笔记本电脑)未连接到域,域用户也可以登录。由于Windows本质上是为您处理身份验证,因此您真正需要做的就是授权谁可以使用该软件。我可以想到几种可能性。
首先,在数据库中,您可以维护一个用户表,其中包含可以访问该软件的用户的SID和用户名。当用户执行程序时,检查当前登录用户的SID是否在该表中。这样,您可以限制用户无需连接到Active Directory即可实际执行软件的内容。这还允许您撤消数据库级别的访问权限。
其次,数据库服务器是否可以访问Active Directory?如果是这样,请在AD中为有权访问此系统的用户创建一个组,然后在该数据库中授予该组访问权限。设置数据库连接以使用Windows身份验证。因此,如果此人在该组中,则他们可以访问该数据库。否则,他们没有。然后,您可以通过在该组中添加或删除访问来控制访问,并且将在数据库级别控制安全性。
第三(我不是这个人的粉丝),如果您有一个Web服务器,运行一个接受用户名和密码的Web服务(当然使用HTTPS),然后使用该Web服务通过您的连接防火墙并对AD进行身份验证。然后,只需将结果返回给您的应用程序。这提出了一些安全问题,即将凭据传递给Web服务并通过防火墙打开连接。