通过远程活动目录验证用户

时间:2012-04-19 12:18:18

标签: c# winforms active-directory

我有一个奇怪的场景,我希望你们可以提供帮助,我需要用活动目录验证当前登录的用户,如果他们在网络上这不是问题,但在某些情况下他们会在另一个网络(访问客户),以便他们使用他们需要的软件来验证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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

Windows在本地计算机上缓存用户名和密码,以便即使计算机(例如笔记本电脑)未连接到域,域用户也可以登录。由于Windows本质上是为您处理身份验证,因此您真正需要做的就是授权谁可以使用该软件。我可以想到几种可能性。

首先,在数据库中,您可以维护一个用户表,其中包含可以访问该软件的用户的SID和用户名。当用户执行程序时,检查当前登录用户的SID是否在该表中。这样,您可以限制用户无需连接到Active Directory即可实际执行软件的内容。这还允许您撤消数据库级别的访问权限。

其次,数据库服务器是否可以访问Active Directory?如果是这样,请在AD中为有权访问此系统的用户创建一个组,然后在该数据库中授予该组访问权限。设置数据库连接以使用Windows身份验证。因此,如果此人在该组中,则他们可以访问该数据库。否则,他们没有。然后,您可以通过在该组中添加或删除访问来控制访问,并且将在数据库级别控制安全性。

第三(我不是这个人的粉丝),如果您有一个Web服务器,运行一个接受用户名和密码的Web服务(当然使用HTTPS),然后使用该Web服务通过您的连接防火墙并对AD进行身份验证。然后,只需将结果返回给您的应用程序。这提出了一些安全问题,即将凭据传递给Web服务并通过防火墙打开连接。