현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

폼 인증 문제 해결

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:910439
ASP.NET 지원 음성 열

폼 인증 문제 해결

이 칼럼의 필요에 맞게 다루었으면 보려고 하는 문제와 관심 있는 항목에 대 한 아이디어를 향후 기술 자료 문서 및 Support Voice 칼럼을 초대 하려고 합니다. 아이디어와 피드백을 사용 하 여 제출할 수 있는 요청 양식입니다. 이 칼럼의 맨 아래에 폼에 대 한 링크가 있습니다.
ASP.NET Support Voice 칼럼을 시작 합니다. Jerry Orman 라고 해요입니다. 로 연결 된 Microsoft 5 년 이상 하 고 새로운 Microsoft SharePoint 기술을 Microsoft FrontPage 등 웹 관련 기술에 초점을 맞춘 많은 시간을 투자 합니다. 작년 작업으로 기술 지원 엔지니어는 Microsoft ASP.NET 꾸미고 했습니다. Support Voice 칼럼에서 이번 달에서 Microsoft ASP.NET 폼 인증 문제를 해결 하는 방법에 설명 하고자 합니다.
폼 인증 문제 해결
ASP.NET 응용 프로그램에서 폼 인증을 사용 하는 경우는 것 사용자를 로그인 페이지로 리디렉션되면 임의로 발생 하는 문제를 해결 해야 합니다. 이상적으로이 문제는 쉽게 디버거를 연결 하 고 문제를 캡처 할 수 있는 방식으로 발생할 됩니다. 그러나 프로덕션 환경에서는 이런 경우가 거의 없습니다. 이와 같은 임의 문제를 해결 하려면 문제를 근본 원인을 좁힐 수와 관련 된 정보를 기록 해야 합니다.

이 칼럼에서는 간단 하 게 폼 인증 개념을 설명 하겠습니다. 어떤 시나리오가 사용자를 로그인 페이지로 리디렉션되지 이어질 및 관련 문제는 데이터를 캡처하는 방법을 보겠습니다. 폼 인증 정보를 기록 하려면 IHttpModule 인터페이스를 구현 하는 방법을 하겠습니다.

폼 인증 개요

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

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

다음은 Machine.config 파일에서 항목입니다.
<httpModule>     …other modules…     <add name="FormsAuthentication"         type="System.Web.Security.FormsAuthenticationModule" />     …other modules…</httpModule>
폼 인증을 사용 하 여 인증 하기 위한 일반 HTTP 트래픽을 다음과 유사 합니다.
  1. 클라이언트가는 Default.aspx에 HTTP GET을 보냅니다. 없음 폼 인증 쿠키가 전송 됩니다.
  2. 서버가 302 응답 (이동)을 Login.aspx에 보냅니다.
  3. 클라이언트는 Login.aspx에 HTTP POST를 보냅니다. 로그인 정보를 포함합니다.
  4. 서버는 Default.aspx에 302 응답 (이동)을 보냅니다. 폼 인증 쿠키가 포함 됩니다.
  5. 클라이언트가는 Default.aspx에 HTTP GET을 보냅니다. 폼 인증 쿠키가 포함 됩니다.
구현 및 폼 인증을 사용 하는 방법에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.폼 인증 쿠키를 공유 하는 방법에 대 한 자세한 내용은 다음 ASP.NET 웹 사이트를 방문 하십시오.

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

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

시나리오 1

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

참고: 로그 파서를 사용 하면 IIS 로그를 구문 분석할 수 있습니다. 로그 파서를 다운로드 하려면 다음 Microsoft 웹 사이트를 방문. 목록이 해당 사용자의 요청을 설정한 후 로그인 페이지로 요청을 검색 합니다. 알고이 페이지로 리디렉션된 및 리디렉션을 발생 하기 전에 요청을 보려고 합니다. 가 나타나면 클라이언트는 다음과 유사한 하나를 보내지 않은 쿠키 또는 클라이언트와 서버 사이의 네트워크에 쿠키가 제거 되었습니다.

이것은 초기 로그인입니다.
메서드페이지응답쿠키
가져오기/Default.aspx302 (리디렉션)쿠키 없음
가져오기/Login.aspx200 (성공)쿠키 없음
게시물/Login.aspx302 (리디렉션)쿠키 없음
가져오기/Default.aspx200 (성공). ASPXAUTH
가져오기/SomePage.aspx302 (리디렉션)아니요입니다. ASPXAUTH 쿠키
이들은 다른 요청 없이 사이트에서 페이지를 요청에 의해 뒤에서. ASPXAUTH 쿠키입니다.
메서드페이지응답쿠키
가져오기/SomePage.aspx302 (리디렉션)아니요입니다. ASPXAUTH 쿠키
가져오기/Login.aspx200 (성공)아니요입니다. ASPXAUTH 쿠키
게시물/Login.aspx302 (리디렉션)아니요입니다. ASPXAUTH 쿠키
가져오기/SomePage.aspx200 (성공). ASPXAUTH

참고: 첫 번째 요청에서 해당 사용자를 폼 인증 쿠키를 영구 쿠키를 만드는 경우가 아니면 어렵습니다. IIS 로그 요청에서 받은 쿠키만 표시 됩니다. 폼 인증 쿠키를 할 첫 번째 요청이 요청에 대해 성공한 로그인 시도 됩니다.
시나리오 2

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

같은 방법으로 이러한 두 가지 시나리오를 해결할 수 있습니다. 로그인 페이지로 리디렉션 직전에 요청을 살펴봅니다. 이 페이지에 대 한 요청에서 쿠키를 생성 하는 경우이 것은 조사.

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.
306070 Internet Explorer 쿠키의 수 및 크기 제한

클라이언트에 보내는 HTTP 헤더를 보려면 Fiddler를 사용할 수 있습니다. 소통량을 캡처한 후 요청을 두 번 클릭 한 다음 헤더 Set-cookie 헤더를 클릭. 성공적으로 로그인을 추적 하면 성공한 로그인 응답에 Set-cookie 헤더를 표시 됩니다.

Fiddler을 다운로드 하려면 다음 Fiddler 웹 사이트를 방문 합니다.
시나리오 3

요청 클라이언트 퇴사 다양 한 레이어가 전송 되는 패킷에 영향을 줄 수 있습니다. 네트워크 장치는 쿠키를 제거 하는 경우를 확인 하려면 클라이언트와 서버에서 네트워크 추적을 캡처하고 쿠키에 대 한 요청 본문에서 해야 합니다. 클라이언트 요청의 쿠키를 보낸 있는지 확인 하 고 서버가 쿠키를 받았습니다 하려면 서버 추적을 확인 하려고 합니다.

클라이언트 요청

사용자가 인증 된 후 GET 요청입니다. 폼 인증 티켓 정보가 파란색으로 강조 표시 됩니다. 쿠키 정보는 클라이언트 남아 있는지 확인 합니다. 네트워크 모니터 같은 네트워크 캡처 도구를 사용 하면 어댑터를 실제로 진행 하는 트래픽을 표시 됩니다.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61   gTest/WebForm1.a73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63   spx HTTP/1.1..Ac63 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: .AS50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30   PXAUTH=3CEF9B9A043 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36   C37ADF63E6BD37B639 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46   9CDA25000F80728F35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35   51C9566D14C5414538 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46   81C93E2A01DDCDEF32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34   24A17429410C097442 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39   B3ECB064228E353939 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46   9A822B3B936DF08F42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43   BABD3E102D00210C32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46   2E1398079B23529F34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65   4F5D74A; Profile3d 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) 만료를 사용 하 여 20 분 만료 날짜를 설정 합니다. 사용자가 오후 2 시에 사이트를 방문 하 고 오후 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: 폼 인증 티켓이 쿠키 anddecrypts를 검색 하는 클래스입니다. 또한 application'sWeb.config 파일을 확인 하는 폼 인증 사용 확인 합니다.
  • FormsAuthConfig.cs: theFormsAuthLogger.config 파일에서 정보를 읽는 클래스입니다.
  • Log.cs: stringbuilder를 사용 하 고 값 outto 로그 파일에 기록 하는 파일입니다.
  • FormsAuthLogger.config: XML 파일 읽을 수 있는 Log.cs 파일에서. 빌드된 DLL과 /bin 폴더에 Thisfile에 있습니다. 파일 toconfigure를 다음 있습니다.
    • IP 필터: 클라이언트 ip 데이터 캡처할 필터링 할 수 있습니다. 이 방법으로 문제를 재현 하는 알려진 클라이언트에서 요청만 기록할 수 있습니다. 이 로그의 크기를 줄입니다.
    • 캡처 형식: 파일을 저장할 위치를 지정 합니다. 기본 임시 ASP.NET 파일 폴더 이지만 작업자 프로세스 계정에 해당 폴더에 쓸 수 있는 기능으로 어디서 나이 저장할 수 있습니다.
참고: FormsAuthLogger.zip 파일에는 코드에 대 한 다운로드 링크를 제공 합니다.

내가 여기에 주요 영역 사항:
  1. IHttpModule 인터페이스를 구현 하는 클래스를 만듭니다.
    public class FormsAuthEvents : IHttpModule {		…code…}
  2. 살펴 이벤트를 연결 합니다. 이 샘플에서는 Application_BeginRequest 이벤트. 이 이렇게 우리가 수 조사 각 요청 ifit 폼 인증 쿠키에 확인 및 로그 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. 폼 인증 쿠키 및 다음 decryptit 검색.
  5. 값을 기록 합니다. 다음 inaddition 양식 정보를 로깅 것을 권장 합니다. 이렇게 하면 필요한 경우 formsauthentication 정보를 IIS 로그 일렬로:
    • 날짜:을 사용 하면 요청이 수신 될 때 볼 수 있습니다.
    • RequestType: Get 또는 Post 요청 인지 여부를 표시 합니다.
    • URL: 요청 문제에 이르는 패턴을 보여 줍니다.
    • 참조 페이지
    • ClientIP: 특정 고객에 대 한 요청에 연관 됩니다.

언제나 원하는 주제에 대 한 의견을 자유롭게 배달 나중에 열 또는 사용 하 여 기술 자료에 있는 요청 양식입니다.

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 910439 - 마지막 검토: 07/25/2015 13:18:00 - 수정: 3.0

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0, Microsoft ASP.NET 2.0

  • kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtko
피드백
eElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">