2012-04-19 7 views
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; 
      } 
     } 
    } 
+0

他のネットワーク上にある場合、ネットワークにVPN接続していますか?これはスタンドアロンのアプリケーションですか、それともネットワークに他の接続を確立していますか(データベース接続など)? – NYSystemsAnalyst

+0

種類の両方の笑、VPNのセットアップはありませんが、私はその方法を検証することができると思っていたオフサイトのデータベースエンジンへのポートトンネルの設定がありますが、資格情報 – Neo

答えて

0

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

最初に、データベースには、ソフトウェアにアクセスできるユーザーのSIDとユーザー名を使用してユーザー表を管理できます。ユーザーがプログラムを実行するときは、現在ログインしているユーザーのSIDがそのテーブルにあることを確認します。これにより、Active Directoryに接続せずにユーザーが実際にソフトウェアを実行できる内容を制限できます。これにより、データベースレベルでアクセスを取り消すこともできます。

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

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

+0

私の唯一の問題は、ソフトウェアがADを使用してExchange統合用のユーザーの一覧を取得することです。ただし、接続がない場合は、これらの機能を無効にすることができます。 データベースにはADにアクセスすることはできません。ウェブサービスは(LinuxのWebサーバー)でも動作しません。 – Neo

+0

別の方法として、(おそらく夜間に)実行されるスケジュールされたジョブを作成し、 ADからのユーザーその後、アプリケーションはそのテーブルから抜け出すことができます。データはリアルタイムではありませんが、十分近いかもしれません...? – NYSystemsAnalyst

+0

受け入れられた答え、私は同様に同様に有効性を確認するために私も交換するように話すことができることに気づいた:) – Neo

関連する問題