AD 인증(도메인 인증)을 기존 웹 사이트에 추가
3175 단어 확인
검증 후 사이트의 각 페이지에서 어떻게 이런 인증된 상태를 유지하는지는 때때로 스스로 실현해야 한다(cookie 또는 다른 방식을 통해).
하지만, asp.net는 몇 가지 신분 검증 메커니즘을 제공하여 우리가 검증하는 것을 편리하게 할 수 있다.Forms 및 Windows가 주로 사용됩니다.현재의 요구 사항은 기존 시스템에 AD 인증을 추가하는 것입니다.
현재 시스템의 개요는 다음과 같습니다.
1. 서버와 클라이언트가 같은 구역에 있지 않습니다.(테스트 서버와 클라이언트가 같은 영역에 있음)
2. 기존 웹 사이트의 인증은 Forms를 사용합니다.
따라서 자료를 조회한 결과 자동 AD 검증을 실현하려면 가입 지역의 사용자가 사이트의 로그인 페이지를 열기만 하면 아무런 입력도 필요 없이 시스템에 자동으로 로그인할 수 있고 신분인증 모델을 Windows로 바꿔야 한다는 것을 발견했다.
단계별 시도를 통해 다음 단계를 요약해 보겠습니다.
1. 웹config의 검증 노드를 윈도우즈 검증으로 수정
<authentication mode="Forms">
<forms loginUrl="~/logon.aspx" name="ESSAuthForm" timeout="10" protection="All" path="/">
<credentials passwordFormat="MD5">
<user name="username" password="password"/>
</credentials>
</forms>
</authentication>
이것은 원래의 웹이다.config의 설정 노드:
3. 로그인 페이지 끝에 LDAP 유효성 검사 방법을 호출하여 자동 유효성 검사를 수행합니다.유효성 검사 코드는 다음과 같습니다.
public static string GetUserLoginName(HttpContext context)
{
if (context == null)
return null;
if (context.Request.IsAuthenticated == false)
return null;
DBLog.Debug("context.User.Identity.Name is:" + context.User.Identity.Name);
string userName = context.User.Identity.Name;
// userName :UserDomainName\LoginName
// LoginName 。
string[] array = userName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
if (array.Length == 2)
return array[1];
DBLog.Debug("userName is:" + userName);
return userName;//null;
}
그 원리는 IIS가 AD 검증을 완성하고 검증 결과를 context에 넣는 것이다.User.아이덴티티 대상에서
이 방법은 도메인 계정의 로그인 이름을 되돌려줍니다. 도메인 계정 로그인 이름과 원래 시스템 계정의 로그인 이름의 대응 관계표를 통해 원래 시스템의 로그인 이름을 찾을 수 있습니다.관련 로그인 방법을 호출하여 로그인합니다.
4. 브라우저 설정
IE에서 사용자 이름 암호 상자를 팝업하지 않으려면 로컬 Intranet에 주소를 추가해야 합니다.
5. 원래 시스템은 Forms 인증을 사용하기 때문에 종료할 때 청소 작업을 해야 하고 청소 관련 코드를 호출해야 한다.따라서 퇴출할 때의 자원 정리 이상을 피하고 Ess를 삭제했습니다.WebSite.dll의 Logout 클래스의 페이지load 메서드의 FormsAuthentication.SignOut () 메서드와 함께 마지막 리디렉션 문장을 Response.Redirect(FormsAuthentication.LoginUrl,fasle)가 Response로 변경되었습니다.Redirect ("~/logon.aspx? logout=true",fasle) 는 첫 페이지에서 BeginLDAP () 가 계속 실행되지 않도록 하기 위해 logout의 매개 변수를 추가합니다.
if (Request.QueryString["logout"] == null)
{
BeginLDAP();
}
생산 환경으로 갱신할 때 생산 환경이 같은 구역에 있지 않기 때문에 성공하지 못했다.
하지만 테스트 환경에서는 성공적으로 이뤄질 수 있다.
참조 자료:
http://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html
http://msdn.microsoft.com/zh-cn/library/ms180890
http://msdn.microsoft.com/zh-cn/library/ff647076.aspx