2011-01-10 4 views
1

내가 How to grab AD credentials from client machine in a web application?Active Directory에 쿼리 ASP VB 닷넷은

에 설명 된 것과 같이 작동은 Visual Basic .NET으로 작성된 ASP 닷넷 웹 appliaction (6 IIS) Windows Server 2003에서 실행이 신뢰할 수있는 사이트에서 작동 사용자는 인트라넷 페이지에 액세스하고 Windows 인증을 사용하여 사용자를 식별합니다. 그런 다음 응용 프로그램은 Active Directory에서 해당 사용자를 조회하여 해당 사용자의 IpPhone에 대한 속성 값을 가져옵니다. 이 번호는 직원 ID에 사용되는 번호입니다.

IE8에서 사이트에 액세스 할 수 있으며 Windows Auth가 나에게 메시지를 표시하고 작동하는 것처럼 보일 수 있지만 응용 프로그램이 내 Active Directory 사용자 "IP 전화"값 (일명 내 직원 번호)을 가져올 수 없습니다. 신뢰할 수있는 사이트에 URL을 추가하면 응용 프로그램이 내 직원 ID를 성공적으로 가져옵니다.

모든 브라우저 (FireFox, Safari 및 Chrome)에서이 작업을 수행한다는 점만 제외하면 큰 문제는 아닙니다. 파이어 폭스 (ntlm-authenticate, firefox 용 google 'config')에 대한 해결책을 찾았습니다. 그러나이 응용 프로그램은 신뢰할 수있는 사이트에 있어야하지 않아야하며, 신뢰할 수있는 사이트에 없어도이 기능을 사용할 수 있다면 모든 브라우저에서 작동 할 것입니다.

아무도 아이디어가 있습니까? 미리 감사드립니다.

답변

0

아래 스크린 샷의 설정을 살펴보십시오. 자동 로그온은 Internet Explorer를 통해 리소스에 액세스 할 때 Windows 인증을 사용하는 것을 말합니다. 즉, 디렉토리의 서버에서 웹 페이지에 액세스하면 컴퓨터에 로그인 한 자격 증명이 자동으로 액세스하는 서버로 전달됩니다.

자격 증명은 일반적으로 내게 알려지지 않은 이유로 신뢰할 수있는 사이트로 전달됩니다. 왜 그런지 모르겠지만이 행동을 충분히 털어 놓았습니다.

이 기능은 Firefox에서 발견 된 해결 방법을 제외하고는 IE에서만 사용할 수 있으며 유사한 해결 방법을 찾지 않는 한 다른 브라우저에서는 작동하지 않습니다. 이 검색을 수행하고 오히려 Windows 통합 보안에 의존하지 않고, 사용자 이름과 암호를 따라 통과

http://msdn.microsoft.com/en-us/library/wh2h7eed.aspx

: 다음과 같이

더 나은 솔루션은 코드에서 사용자 이름과 암호를 지정하는 것 .

alt text

나는 당신이 당신의 필요에 따라 수정할 수 있습니다, 우리의 도메인 이름에 따라 이메일을 받고 여기 코드의 작업 조각을 가지고

Public Function GetEmailFromUserName(ByVal UserID As String) As String 
    Dim ReturnValue As String = "" 


    Dim myAD As New System.DirectoryServices.DirectoryEntry("LDAP://mydomain", System.Configuration.ConfigurationManager.AppSettings("adsearchname"), System.Configuration.ConfigurationManager.AppSettings("adsearchpwd")) 
    Dim searcher As New System.DirectoryServices.DirectorySearcher(myAD) 
    searcher.Filter = ("(anr= " & UserID & ")") 
    searcher.PropertiesToLoad.Add("mail") 
    For Each myResult As System.DirectoryServices.SearchResult In searcher.FindAll() 
     For Each Key As String In myResult.Properties.PropertyNames 
      If InStr(myResult.Properties.Item(Key).Item(0), "@") Then 
       ReturnValue = myResult.Properties.Item(Key).Item(0) 
      End If 
     Next 
    Next 

    Return ReturnValue 
End Function 
+0

감사 데이비드, 우리는을 만들어 결국 낮은 수준의 도메인 사용자 계정 및 web.config에 하드 코딩. 그 후 IIS_WPG 그룹에 추가하고 모든 작업이 완료되었습니다! –

+0

좋은 거래! web.config를 암호화하여 사용자 이름/암호를 보호해야합니다. – David

관련 문제