인트라넷 용으로 구축 한 여러 웹 응용 프로그램이 있습니다. 사용자가 로그인하는 것을 걱정하지 않도록하고 싶었 기 때문에이 앱은 사이트에 접속할 때 현재 로그온 한 사용자를 끌어옵니다. 이 코드를 사용하면 다음과 같은 코드가 사용됩니다.ASP.Net (IIS 7.5) 사용자 자격 증명없이 Active Directory 쿼리
Dim userName As String = User.Identity.Name
CurrentUser = userName.Substring(userName.IndexOf("\") + 1)
이것은 매력적으로 작동하며 여기에는 문제가 없습니다. 다음 단계는 로그인 한 사용자에 대해 Active Directory에 쿼리하여 다양한 정보를 가져 오는 것입니다. 어떻게 코딩했는지, devleopment 측면의 매력처럼 작동합니다 (IIS를 실행하지 않기 때문에 일반적 임).
IIS 서버 (IIS 7.5를 실행하는 Windows Server 2008 R2)에 게시 할 때 문제가 발생하면 Active Directory를 쿼리하는 코드의 특정 줄을 가리키는 오류 메시지가 나타납니다. 재미있는 부분은 위의 애플 리케이션이 위대한 지난주 일하고 있었다는 것입니다. 그들은 내 서버 관리자가 Windows Update의 최신 배치를 수행 한 후 깨졌습니다 (.Net Framework 4.0을 사용하여 실행 중입니다).
Windows 인증이 사용되도록 각 응용 프로그램을 설정하기 전에 다른 인증 유형이 비활성화되었습니다. . 공급자의 경우 Negotiate는 # 1, NTLM은 # 2입니다. 고급 설정의 경우 확장 된 보호 = 꺼짐 및 커널 모드 인증 사용이 선택되어 있습니다.
<customErrors mode="Off"/>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
이가 내가 가진의 설정을, 그리고 모든 마법처럼 일했다 :
내 Web.config의 다음과 같은 세트가 있습니다. 이제는 다소 효과를 발휘하기 위해 NTLM이 # 1이고 협상이 # 2이므로 제공자를 교환해야합니다. 이 때문에 사용자의 자격 증명이 제대로 전달되지 않고 AD 쿼리가 실패합니다. 이것은 내가 쿼리를 위해 사용하고 코딩입니다 : 앞에 협상에 사이트를로드 할 때 사용자 이름/암호가 설정되어 있지 않기 때문에 업데이트 이후로
Dim adSearchRoot As New DirectoryEntry("LDAP://DC=[DOMAIN],DC=com")
Dim adSearch As New DirectorySearcher(adSearchRoot)
adSearch.Filter = "(&(ObjectClass=User)(sAMAccountName=" & CurrentUser & "))"
Dim searchResult As SearchResult = adSearch.FindOne()
,, 그 결론에 실패 DirectoryEntry에 대해. 사용자 이름/암호를 설정해도 이전처럼 100 % 작동하지 않습니다.
내 질문에, 사용자가 사이트에 액세스 할 수 있도록하려면 어떻게해야합니까, 그들의 사용자 이름을 알 수 있으며 DirectoryEntry에서 사용자 이름/암호를 사용하지 않아도 활성 디렉토리를 쿼리 할 수 있습니까 ??
IIS의 설정입니까? 코드를 다시 작성해야합니까? web.config 설정? 서버 업데이트를 되돌려 놓아야하며 어느 부분에서 중단이 발생하는지 파악해야합니까?
미리 조언 해 주셔서 감사합니다. 질문에 대한 답변을 드릴 질문이 있으면 알려주십시오.
UPDATE 매트 내 web.config 파일에 다음 클립을 추가하여 제안 내가 노력
:
<security>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
이 작동하지 않았다. 나는 약간의 독서를했고, 그 다음이 섹션의 추가 변경 :
<location path="Default Web Site/NameOfApp">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false"/>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
</system.webServer>
</location>
이 일에서 나는 또한 내 Web.config의 섹션에서 최대 높았다 문자열을 제거했습니다.이것도 작동하지 않았다. (fyi, 위대한 참고 번호였다.) http://www.iis.net/ConfigReference/system.webServer/security/authentication
다음은 비슷한 상황 인 것 같았습니다. http://social.technet.microsoft.com/Forums/en/winserverDS/thread/7deba16b-295a-4887-98f9-9f291ed49871. 이 기사는 결국 "이중 홉"을 참조하여이 문제를 조사하고 몇 가지 시도를 한 후에도 내 문제를 해결하지 못했습니다.
나는 문제가 재현 여부 있는지, 다른 서버 2008 R2 시스템에서 새로운 IIS 7.5 구현을 시도하는 것 본질적으로 처음부터 다시 시작하고
다음 단계.
새로운 제안은 큰 도움이 될 것입니다.
오늘 아침에 IIS 6.0을 실행하는 Windows Server 2003 R2 상자에서이 기능을 사용하기로 결정했습니다. 이것을 설정하고 작동해야하는 것처럼 작동하게하는 것은 매우 쉽습니다. 먼저이 웹 인스턴스가 다른 응용 프로그램 풀과 공유하지 않고 자체 인스턴스에 .NET Framework 4를 실행할 수 있도록 응용 프로그램 풀을 만들었습니다. 그렇지 않으면 오류가 발생합니다. 그런 다음 올바른 웹 사이트 아래에 가상 디렉터리를 만들었습니다. 인증은 익명 액세스가없는 Windows 통합 인증으로 설정됩니다. 이러한 설정을 사용하면 매력처럼 작동합니다. 이제 Server 08을 작동시켜야합니다. – JasonH