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. 서버를 Login.aspx 302 응답 (이동)을 보냅니다.

  3. 클라이언트는 Login.aspx에 HTTP POST를 보냅니다. 로그인 정보를 포함합니다.

  4. 서버는 Default.aspx에 302 응답 (이동)을 보냅니다. 폼 인증 쿠키가 포함 됩니다.

  5. 클라이언트가는 Default.aspx에 HTTP GET을 보냅니다. 폼 인증 쿠키가 포함 됩니다.

구현 및 폼 인증을 사용 하는 방법에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.

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.formsauthenticationticket(vs.71).aspx폼 인증 쿠키를 공유 하는 방법에 대 한 자세한 내용은 다음 ASP.NET 웹 사이트를 방문 하십시오.

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)) 확인란을 선택 하 여 클릭과 Referer (cs(Referer)) 확인란.

이 문제가 발생 하면 클라이언트 문제와 해당 클라이언트의 IP 주소는 확인 합니다. IIS 로그온 해당 클라이언트의 IP 주소를 필터링 하 고 <쿠키> 열을 봅니다.

참고: 로그 파서를 사용 하면 IIS 로그를 구문 분석할 수 있습니다. 로그 파서를 다운로드 하려면 다음 Microsoft 웹 사이트를 방문.

http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07목록이 해당 사용자의 요청을 설정한 후 로그인 페이지로 요청을 검색 합니다. 알고이 페이지로 리디렉션된 및 리디렉션을 발생 하기 전에 요청을 보려고 합니다. 가 나타나면 클라이언트는 다음과 유사한 하나를 보내지 않은 쿠키 또는 클라이언트와 서버 사이의 네트워크에 쿠키가 제거 되었습니다.

이것은 초기 로그인입니다.

메서드

페이지

응답

쿠키

가져오기

/Default.aspx

302 (리디렉션)

쿠키 없음

가져오기

/Login.aspx

200 (성공)

쿠키 없음

올리기

/Login.aspx

302 (리디렉션)

쿠키 없음

가져오기

/Default.aspx

200 (성공)

.ASPXAUTH

가져오기

/SomePage.aspx

302 (리디렉션)

아니요입니다. ASPXAUTH 쿠키

이들은 다른 요청 없이 사이트에서 페이지를 요청에 의해 뒤에서. ASPXAUTH 쿠키입니다.

메서드

페이지

응답

쿠키

가져오기

/SomePage.aspx

302 (리디렉션)

아니요입니다. ASPXAUTH 쿠키

가져오기

/Login.aspx

200 (성공)

아니요입니다. ASPXAUTH 쿠키

올리기

/Login.aspx

302 (리디렉션)

아니요입니다. ASPXAUTH 쿠키

가져오기

/SomePage.aspx

200 (성공)

.ASPXAUTH


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

시나리오 2


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

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

자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 다음 문서를 확인하십시오.

306070 번호 및 Internet Explorer 쿠키의 크기 제한


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

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

http://www.fiddlertool.com/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/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) 만료를 사용 하 여 20 분 만료 날짜를 설정 합니다. 사용자가 오후 2 시에 사이트를 방문 하 고 오후 2 시 20 분에 만료 되도록 설정 된 쿠키를 받습니다. 만료 오후 2 시 10 분 후 사용자가 사이트를 방문할 경우에 업데이트 됩니다. 사용자가 오후 2 시 09 분 사이트를 방문 하는 경우 만료 시간의 반이 통과 하지 않았으므로 티켓이 업데이트 되지 않습니다. 사용자 기다리고 12 분, 오후 2 시 21 분 사이트를 방문 하는 경우 티켓이 만료 됩니다. 사용자가 로그인 페이지로 리디렉션됩니다.

접근 하는 한 가지 방법은 이러한 유형의 문제 폼 인증 티켓 및 쿠키 정보를 기록 하는. 이러한 방식으로 쿠키 수신 된 경우에 IIS와의 값은 무엇을 볼 수 있습니다. HttpModule을 작성 하 고 다음 해당 모듈은 요청 파이프라인에 연결 하면 됩니다. 필요한 정보를 얻으려면 응용 프로그램 코드를 수정할 필요가 없습니다.

첨부 된 샘플 Microsoft.NET Framework 1.1과.NET Framework 2.0에서 작동 되었으며 전체에서. 다음 파일을 포함 하는 샘플:참고 FormsAuthLogger.zip 파일에는 코드에 대 한 다운로드 링크를 제공 합니다 내가.

내가 여기에 주요 영역 사항:


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

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

번역 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?

소중한 의견에 감사드립니다.

×