AD 인증(도메인 인증)을 기존 웹 사이트에 추가

3175 단어 확인
모든 사이트에 사용자가 로그인하는 모듈이 거의 있는데 로그인은 신분 검증 과정과 관련된다.일반적인 방법은 페이지에 로그인한Form이 있는 다음에 사용자 이름과 비밀번호에 따라 데이터베이스에 가서 검증하는 것이다.
검증 후 사이트의 각 페이지에서 어떻게 이런 인증된 상태를 유지하는지는 때때로 스스로 실현해야 한다(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의 설정 노드: 2. IIS 디렉터리 보안에서 익명 접근을 사용하지 않고 통합 윈도우즈 인증을 선택합니다.
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

좋은 웹페이지 즐겨찾기