DetailPage-MSS-KB

기술 자료

기술 자료: 910439 - 마지막 검토: 2013년 5월 30일 목요일 - 수정: 2.0

 
ASP.NET 지원 음성 열

이 열에 맞게를 사용자 지정 하려면 보려는 문제 관심 있는 주제에 대 한 아이디어를 향후 기술 자료 문서 및 Support Voice 칼럼 다루었으면 하는 초대 하려면. 사용자 의견 및 피드백을 사용 하 여 제출할 수 있는 요청 (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) 양식입니다. 이 열의 맨 아래에 폼에 대 한 링크가 있습니다.

이 페이지에서

ASP.NET 지원 음성 열 환영 합니다! 내 이름 Jerry Orman입니다. 5 년 된 Microsoft 생겨 대부분 소비한 내 시간 집중 하는 등 Microsoft FrontPage 웹 관련 기술 및 새로운 Microsoft SharePoint 기술입니다. 작년 작업 계산 된 Microsoft ASP.NET 지원 엔지니어와. 이번 달에 음성 지원 열에서 폼 인증 문제를 해결 하는 방법에 설명 하겠습니다. Microsoft ASP.NET입니다.

때 ASP.NET 응용 프로그램에서 폼 인증을 사용, 사용자가 발생 하는 문제를 해결 하는 데 필요한 찾을 수 있습니다. 로그인 페이지로 리디렉션된 임의로. 이상적인 경우에이 문제는 쉽게 연결할 수 있도록 하는 방식으로 발생할 수 있는 디버거 및 문제가 캡처입니다. 그러나 프로덕션 환경에서 거의 케이스입니다. 이와 같은 임의 문제를 해결 하려면 루트 아래로 범위를 좁힐 수 있도록 문제에 관련 된 정보를 기록 하면 원인입니다.

이 칼럼에서는 간단 하 게 다룰 것은 Forms 인증의 개념입니다. 다음에 시나리오 살펴보겠습니다. 사용자 로그인 페이지 및 데이터를 캡처하는 방법에 리디렉션되지 이어질 문제를 확인 하려면 관련입니다. 우리는 폼 인증 정보를 기록 하려면 IHttpModule 인터페이스를 구현 하는 방법을 다룹니다.

폼 인증 개요

폼 인증을 사용 하 여 웹 사이트에 사용자를 인증 하면, 서버는 쿠키를 만듭니다. 쿠키의 값을 암호화 된 폼 인증 티켓이입니다. 요청할 때마다 쿠키가 서버로 전달 FormsAuthenticationModule 클래스 하 고 응용 프로그램에서 쿠키 값을 해독 하 고 사용자 잘못 인지 여부를 결정 합니다.

기본적으로, FormsAuthenticationModule 클래스는 Machine.config 파일에 추가 됩니다. FormsAuthenticationModule 클래스 한다고 하는 프로세스를 관리합니다.

다음은 Machine.config 파일에서 항목입니다.
<httpModule>
     …other modules…
     <add name="FormsAuthentication"
         type="System.Web.Security.FormsAuthenticationModule" />
     …other modules…
</httpModule>
폼 인증을 사용 하 여 인증 하는 일반 HTTP 트래픽을 다음과 비슷합니다.
  1. 클라이언트는 HTTP GET Default.aspx에 보냅니다. 폼 인증 쿠키가 전송 됩니다.
  2. 서버에 Login.aspx 302 (리디렉션) 응답을 보냅니다.
  3. 클라이언트는 HTTP POST를 Login.aspx로 보냅니다. 그 로그인 정보가 포함 되어 있습니다.
  4. 서버에 Default.aspx 302 응답 (이동)을 보냅니다. 폼 인증 쿠키가 포함 됩니다.
  5. 클라이언트는 HTTP GET Default.aspx에 보냅니다. 여기에 폼 인증 쿠키가 포함 됩니다.
구현 및 사용 하는 방법에 대 한 자세한 내용은 폼 인증, 다음 MSDN 웹 사이트를 방문 하십시오.
http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx (http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx)
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication (vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx)
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket (vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspx)
폼 인증 쿠키를 공유 하는 방법에 대 한 자세한 내용은 다음 ASP.NET 웹 사이트를 방문 하십시오.
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx (http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx)

사용자 로그인 페이지로 리디렉션될 수 있습니다 이유

폼 인증 쿠키가 손실 됩니다.

시나리오 1

이 시나리오에서는 사용자가 웹 사이트에 로그온합니다. 일부 지점에서 클라이언트는 서버에 요청 하는 FormsAuthenticationModule 클래스는 쿠키를 수신 하지 않습니다. 할 수 있습니다. 사용자 요청 쿠키는 쿠키를 사용 하 여 포함 하지 않거나 결정 합니다. Microsoft 인터넷 정보 서비스 (IIS)에서 로깅을. 이렇게 하려면 다음과 같이 하십시오.
  1. IIS Microsoft 관리 콘솔 (MMC)을 엽니다.
  2. 웹 사이트를 마우스 오른쪽 단추로 클릭 하 고을 클릭합니다속성.
  3. 클릭 하 여 웹 사이트 탭을 클릭 하 고 사용 하도록 설정 로깅.
  4. 로그 형식 인지 확인 W3C 확장 로그 파일 형식.
  5. 클릭 속성.
  6. 클릭 하 여 고급 탭을 클릭 하 고확장된 속성.
  7. 아래에서 확장된 속성를 선택 하 여 Cookie(cs(Cookie)) 확인란 및 참조 자 (cs(Referer)) 확인란입니다.
이 문제가 발생 하면 클라이언트에 있는 결정은 문제 및 해당 클라이언트의 IP 주소입니다. IIS 로그온 해당 클라이언트의 IP 주소 필터링, 쿠키볼 &gt; 열.

참고 로그 파서를 사용 하면 IIS 로그를 구문 분석할 수 있습니다. 로그 파서를 다운로드 하려면 다음 Microsoft 웹 사이트를 방문 하십시오.
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07 (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07)
목록에서 이러한 특정 요청을 한 후 사용자를 로그인 페이지로 요청을 검색 합니다. 사용자가 리디렉션된 알으십시오 이 페이지를 요청 하기 전에 보려는 여 리디렉션 발생 했습니다. 다음으로, 클라이언트 등이 나타나면 두 클라이언트 간의 네트워크에서 제거 된 쿠키 또는 쿠키 보내지 않았습니다. 및 서버입니다.

이것은 초기 로그인입니다.
표 축소표 확대
메서드페이지응답쿠키
GET/Default.aspx302 (리디렉션)아니요 쿠키
GET/Login.aspx200 (성공)아니요 쿠키
게시물/Login.aspx302 (리디렉션)아니요 쿠키
GET/Default.aspx200 (성공).ASPXAUTH
GET/SomePage.aspx302 (리디렉션)아니요 .ASPXAUTH 쿠키
이러한 요청에 따라 페이지에 사이트의 뒤에 다른 요청입니다. 없이.ASPXAUTH 쿠키입니다.
표 축소표 확대
메서드페이지응답쿠키
GET/SomePage.aspx302 (리디렉션)아니요 .ASPXAUTH 쿠키
GET/Login.aspx200 (성공)아니요 .ASPXAUTH 쿠키
게시물/Login.aspx302 (리디렉션)아니요 .ASPXAUTH 쿠키
GET/SomePage.aspx200 (성공).ASPXAUTH

참고 첫 번째 요청에서 해당 사용자의 폼이 높습니다. 인증 쿠키는 영구 쿠키를 만드는 경우가 아니면. IIS 로그만 하면 쿠키 표시 합니다 있는 요청을 받았습니다. 요청에 폼 인증 쿠키를 할 첫 번째 요청 후에 성공적으로 수행 됩니다. 로그인 합니다.
시나리오 2

클라이언트의 쿠키 제한을 초과 하는 경우 또한 폼 인증 쿠키가 손실 될 수 있습니다. Microsoft에서 Internet Explorer 20 개의 쿠키를 제한이 됩니다. 후 20 쿠키 클라이언트에서 만든 이전 쿠키는 클라이언트에서 제거 컬렉션입니다. 경우는.ASPXAUTH 쿠키 제거 되 고 요청이 처리 될 때 사용자 로그인 페이지로 리디렉션됩니다.

이러한 두 시나리오를 동일한 방식으로 해결할 수 있습니다. 요청 시 바로 확인 로그인 페이지로 리디렉션을 전에. 이 페이지에는 요청을 생성 하는 경우 쿠키,이 조사 하려면 뭔가 됩니다.

자세한 내용을 보시려면, Microsoft 기술 자료의 다음 문서 번호를 클릭해 주십시오.
306070  (http://support.microsoft.com/kb/306070/ ) Internet Explorer 쿠키의 숫자와 크기 제한

Fiddler를 사용 하는 HTTP 헤더를 볼 수 있습니다. 클라이언트에 보내집니다. 트래픽을 캡처하는 후에 요청을 두 번 클릭, 다음을 클릭 하 고 머리글 Set-cookie 헤더를 확인할 수 있습니다. 사용자를 추적 하는 경우는 성공적으로 로그인 Set-cookie 헤더의 응답에 표시 됩니다에 성공적으로 로그인 합니다.

Fiddler을 다운로드 하려면 다음 Fiddler 웹 사이트를 방문 하십시오.
http://www.fiddlertool.com/fiddler/ (http://www.fiddlertool.com/fiddler/)
시나리오 3

요청이 클라이언트에서 나가기 후에 다양 한 계층이 전송 되는 패킷을 발생할 수 있습니다. 네트워크 장치를 있는지 확인 하려면 쿠키를 제거 하는, 클라이언트와 서버에서 네트워크 추적을 캡처하는 데 사용 한 다음 본문의 쿠키에 대 한 요청을 찾습니다. 원합니다 클라이언트 요청에 쿠키가 전송 되었는지 확인 합니다 확인 하 고 서버를 확인 합니다. 서버 쿠키를 받았는지 확인 하는 추적입니다.

클라이언트 요청

사용자가 인증 된 후이 GET 요청입니다. 는 폼 인증 티켓 정보가 파란색으로 강조 표시 됩니다. 이 확인 클라이언트의 쿠키 정보는 왼쪽. 네트워크 캡처를 사용 하는 경우 도구를 실제로 전달 되었는지는 트래픽을 볼 Netmon 같은 어댑터입니다.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61   gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63   spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c   cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53   che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30   PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36   C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46   9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35   51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46   81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34   24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39   B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46   9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43   BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46   2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65   4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62   =VisitorId=b24eb
서버측 요청

보면 요청으로 서버에 도달 하면 원하는 서버에 동일한 정보를 받았는지 있는지 확인 하는 클라이언트 보냅니다. 서버가 동일한 정보를 받지 못했습니다 경우에 다른 장치를 조사할 필요가 있는 쿠키 위치 제거 되었는지 확인 하려면 네트워크입니다.

참고 쿠키를 제거 하는 ISAPI 필터의 인스턴스 있었습니다. 웹 서버 쿠키 받았지만 쿠키 목록에서 확인 하면 IIS 로그에 ISAPI 필터를 확인 합니다. 해야 하는 필터를 제거 합니다 있는 문제가 해결 되었습니다.

폼 인증 티켓 시간 초과

다른 일반적인 원인은 사용자가 리디렉션될 수 있습니다 경우는 폼 인증 티켓이 만료 되었습니다. 폼 인증 티켓 시간 초과 두 가지 방법으로 할 수 있습니다. 사용 하는 경우 첫 번째 시나리오를 발생 절대 만료 됩니다. 절대 만료 된 인증 티켓이 만료 되는 경우는 만료 시간이 만료 됩니다. 예를 들어, 만료 시간을 20 분 및 사용자 설정 오후 2 시에 사이트를 방문합니다. 경우 사용자는 로그인 페이지로 이동 합니다. 오후 2 시 20 분 후 사이트를 방문 하는 사용자.

상대 (sliding) 만료를 사용 하는 경우는 시나리오를 조금 더 복잡해 집니다. 쿠키와 결과 티켓이 만료 시간은 절반 만료 된 후 사용자가 사이트를 방문할 경우 업데이트 됩니다. 예를 들어, 상대 (sliding) 만료를 사용 하 여 20 분 만료를 설정 합니다. 오후 2 시 00 분에, 사용자가 사이트를 방문할 받고 사용자 쿠키는 오후 2 시 20 분에 만료 되도록 설정 됩니다. 만료 오후 2 시 10 분 후 사용자가 사이트를 방문할 경우에 업데이트 됩니다. 오후 2 시 09 분에 사용자가 사이트를 방문할 경우 티켓 때문에 업데이트 되지 않습니다의 절반 만료 시간이 지났습니다. 사용자 다음 12 분, 오후 2 시 21 분에 사이트를 방문 기다리면 티켓 만료 됩니다. 사용자를 로그인 리디렉션됩니다. 페이지입니다.

양식에 기록 하는 것이 이러한 종류의 문제에 접근 하는 한 가지 방법은 인증 쿠키 및 티켓 정보입니다. 이 이렇게 하면 볼 수 있는 IIS와 값으로 쿠키를 받았습니다. 작성 하 여이 수행할 수 있습니다. HttpModule및 다음 해당 모듈은 요청 파이프라인에 연결 합니다. 정보를 가져오려면 응용 프로그램의 코드를 수정 해야 합니다 경우 필요 합니다.

첨부 된 샘플은 Microsoft.NET Framework 1.1 및.NET Framework 2.0에서 작업 하 고 있을 전체 설명입니다. 샘플에는 다음 파일이 포함 됩니다.
  • FormsAuthEvents.cs: Application_BeginRequest 이벤트에 연결 하 고 IHttpModule 을 구현 하는 클래스입니다.
  • FormsAuthInfo.cs: 쿠키를 검색 하는 클래스 및 폼 인증 티켓의 암호를 해독 합니다. 또한 응용 프로그램의 검사 Web.config 파일을 하는 폼 인증을 사용할 수 있습니다.
  • FormsAuthConfig.cs: 정보를 읽는 클래스는 FormsAuthLogger.config 파일입니다.
  • Log.cs: stringbuilder를 받아들이고 값을 작성 하는 파일 로그 파일에 있습니다.
  • FormsAuthLogger.config: 읽은 XML 파일은 Log.cs 파일입니다. 이 파일 /bin 폴더에 빌드된 DLL 있어야 합니다. 파일을 사용 하면 수 있습니다. 다음을 구성 합니다.
    • IP 필터: 데이터의 캡처를 필터링 할 수 있습니다 클라이언트 Ip입니다. 이 이렇게 요청만 하 라고 하는 클라이언트에서 로그온 할 수 있습니다. 문제를 재현 합니다. 이 로그의 크기를 줄입니다.
    • 캡처 형식:이 파일을 저장할 위치를 지정 합니다. 기본 임시 ASP.NET 파일 폴더에 있지만이 저장할 수 있습니다. 작업자 프로세스 계정에 쓸 수 있습니다 하는 곳으로 폴더입니다.
참고 제공 된 코드에 대 한 다운로드 링크를 제공할 수 있는 FormsAuthLogger.zip 파일입니다.

주 영역을 여기서 지정할 수 있습니다.:
  1. IHttpModule 인터페이스를 구현 하는 클래스를 만듭니다.
    public class FormsAuthEvents : IHttpModule 
    {
    		…code…
    }
  2. 확인 하려면 원하는 이벤트를 연결 합니다. 이 샘플에서는 여기 Application_BeginRequest 이벤트를 사용 합니다. 이러한 방식으로 각 요청을 조사 하 고 확인 수 있습니다. 쿠키가 있는 경우는 폼 인증 쿠키 및 로그 FormsAuthenticationTicket 이 있습니다.
    public void Init(HttpApplication application) 
    {
    	//Wire up the BeginRequest event
    	application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. Application_BeginRequest 이벤트를 구현 합니다.
    private void Application_BeginRequest(Object source, EventArgs e)
    {	
       …code to log the ticket…
    }
    
  4. 폼 인증 쿠키를 검색 한 다음 해독 가입니다.
  5. 값을 기록 합니다. 다음 로그인을 권장 합니다. 양식 정보를 추가 합니다. 데 도움이 됩니다 폼을 선 필요한 경우 IIS에 인증 정보를 기록 합니다.
    • 작성일: 요청이 왔을 때 볼 수 있습니다. 에.
    • RequestType: 요청이 Get 인지 또는 a를 보여 줍니다. 게시물입니다.
    • URL: 패턴을 보여 줍니다. 문제를 유발 하는을 요청 합니다.
    • 참조 페이지
    • ClientIP: 특정 요청을 연결 클라이언트입니다.

항상 주제에 원하는 의견을 자유롭게합니다 사용 하는 기술 또는 미래 열 처리는 요청 (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) 양식입니다.

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
키워드: 
kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtko
기계 번역된 문서기계 번역된 문서
이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.
이 문서의 영문 버전 보기:910439  (http://support.microsoft.com/kb/910439/en-us/ )
공유
추가 지원 옵션
Microsoft Community 지원 포럼
직접 문의하기
Microsoft Certified Partner 찾기
Microsoft Store