2012-04-19 2 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에 연결하지 않고 사용자가 실제로 소프트웨어를 실행할 수있는 대상을 제한 할 수 있습니다. 또한 데이터베이스 수준에서 액세스 권한을 취소 할 수 있습니다.

둘째, 데이터베이스 서버가 Active Directory에 액세스 할 수 있습니까? 그렇다면이 시스템에 대한 액세스 권한이있는 사용자를 위해 AD에 그룹을 만든 다음 해당 그룹에 데이터베이스에 대한 액세스 권한을 부여하십시오. Windows 인증을 사용하도록 데이터베이스 연결을 설정하십시오. 따라서 해당 그룹에 속한 사용자는 데이터베이스에 액세스 할 수 있습니다. 그렇지 않으면, 그들은하지 않습니다. 그런 다음 그룹에 추가하거나 제거하여 액세스를 제어 할 수 있으며 보안은 데이터베이스 레벨에서 제어됩니다.

웹 서버가있는 경우 사용자 이름과 암호를 허용하는 웹 서비스 (물론 HTTPS 사용)를 실행 한 다음 해당 웹 서비스를 통해 연결할 수 있습니다 귀하의 방화벽 및 AD에 대한 인증. 그런 다음 결과를 응용 프로그램에 반환하십시오. 이것은 자격 증명을 웹 서비스에 전달하고 방화벽을 통해 연결을 여는 데 몇 가지 보안 문제를 나타냅니다.

+0

내 유일한 문제는 소프트웨어가 AD를 사용하여 Exchange 통합 사용자 목록을 가져 오는 것입니다. 그러나 연결이 없으면이 기능을 비활성화 할 수 있습니다. 데이터베이스에 AD에 대한 액세스 권한이없고 웹 서비스가 리눅스 웹 서버에서도 작동하지 않습니다. – Neo

+0

또 다른 옵션은 (야간에) 실행되는 예약 된 작업을 사용하여 데이터베이스의 테이블을 광고에서 사용자. 그런 다음 응용 프로그램은 해당 테이블을 끌어 올 수 있습니다. 데이터는 실시간이 아니지만 충분히 가까울 수 있습니다 ...? – NYSystemsAnalyst

+0

수락 된 응답, 나는뿐만 아니라 나는 또한 유효성을 검사 할뿐만 아니라 교환 할 수 있다고 생각했습니다 :) – Neo

관련 문제