0

私はあなたたちが助けてくれることを願っている奇妙なシナリオを持っています.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;
            }
        }
    }
4

1 に答える 1

0

Windowsは、ローカルマシンにユーザー名とパスワードをキャッシュして、ラップトップなどのマシンがドメインに接続されていない場合でもドメインユーザーがログインできるようにします。Windowsは基本的に認証を処理するため、実際に行う必要があるのは、ソフトウェアを使用できるユーザーを承認することだけです。私はいくつかの可能性を考えることができます。

まず、データベースで、ソフトウェアにアクセスできるユーザーのSIDとユーザー名を含むユーザーテーブルを維持できます。ユーザーがプログラムを実行するときは、現在ログインしているユーザーのSIDがそのテーブルにあることを確認してください。このようにして、ActiveDirectoryに接続せずにユーザーが実際にソフトウェアを実行できるものを制限できます。これにより、データベースレベルでアクセスを取り消すこともできます。

次に、データベースサーバーはActive Directoryにアクセスできますか?その場合は、このシステムにアクセスできるユーザー用にADでグループを作成し、データベースでそのグループへのアクセスを許可します。Windows認証を使用するようにデータベース接続を設定します。したがって、その人がそのグループに属している場合、その人はデータベースにアクセスできます。そうでなければ、彼らはしません。次に、そのグループにアクセスを追加または削除するだけでアクセスを制御でき、セキュリティはデータベースレベルで制御されます。

3番目(そして私はこれのファンではありません)、Webサーバーがある場合は、ユーザー名とパスワードを受け入れるWebサービス(もちろんHTTPSを使用)を実行し、そのWebサービスを使用してファイアウォールを介して接続して認証しますADに対して。次に、結果をアプリケーションに返します。これは、資格情報をWebサービスに渡し、ファイアウォールを介して接続を開くことに関するセキュリティ上の懸念を示します。

于 2012-04-19T13:41:19.253 に答える