0

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

1 回答 1

0

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

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

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

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

于 2012-04-19T13:41:19.253 回答