2009-04-03 5 views
7

ASP.NET 응용 프로그램에 제안 된 요구 사항 중 하나는 전역에서 세션 상태를 사용하지 않도록 설정 한 것입니다. (이는 협의가 불가능합니다.)ASP.NET에서 세션 상태가없는 사용자 인증

또 다른 요구 사항은 사용자 인증을위한 몇 가지 수단이 있다는 것입니다. ASP.NET의 멤버 자격 공급자 모델을 사용하려고합니다.

세션 상태없이 사용자 인증이 가능합니까?

우리가 찾고있는 특정 사용자 인증 예

는 다음과 같습니다

  • 사용자가 인증되지 않은 웹 사이트로 이동
  • 사용자는 세션의 나머지 부분 등록 정보 (연락처 필드 등)
  • 를 입력 사용자는 등록 상태로 인해 특정 콘텐츠에 액세스 할 수 있습니다.

쿠키를 사용하여이를 수행 할 방법이 있습니까?

쿠키를 쉽게 스푸핑 할 수 없도록 안전하게 할 수 있습니까?

이 기능을 지원하는 ASP.NET에 기본 제공 기능이 있습니까? 아니면 자체 메서드를 롤백해야합니까?

답변

12

ASP.NET 폼 인증은 SessionState을 사용하지 않습니다. 쿠키를 사용하여 인증 티켓을 저장합니다.

web.config 파일을 편집하여 SSL 채널을 통해 인증 티켓을 보내도록 할 수도 있습니다.

필요한 모든 기능을 ASP.NET에서 사용할 수 있습니다.

http://msdn.microsoft.com/en-us/library/aa480476.aspx

+0

좋아요. validationKey가 필요하고 decryptionKey가 작동하려면 웹 팜의 모든 서버에서 동일해야합니다. 웹 팜에있는 경우 – frankadelic

+0

, 예. –

0

예, 쿠키를 사용할 수 있습니다.

쿠키의 문제점은 많은 데이터를 유지할 수 없다는 점입니다. 마법사 유형 등록을 위해 데이터베이스에 데이터를 저장 한 다음 행 키/ID를 암호화 된 쿠키에 저장합니다. 이렇게하면 사용자가 다음 단계로 이동할 때 데이터베이스에서 데이터를 검색 할 수 있습니다.

쿠키의 경우 쿠키 값을 타임 스탬프하고 암호화 할 수 있습니다. 나는 일반적으로 사용자의 인증 상태를 관리하지 않습니다. 내장 된 FormsAuthentication 클래스를 사용하여 웹 응용 프로그램의 해당 부분을 관리합니다.

Myspace 및 라이브 검색 클럽과 같은 대규모 사이트는 쿠키를 상태 관리로만 사용합니다.

2

물론 쿠키가이를 수행합니다.

기본 사항을 생각해보십시오. 세션 상태는 어쨌든 쿠키에 의해 관리됩니다.

다음은 작업 내용입니다.

로그인 할 때 사용자 ID와 시간 제한을 사용합니다 (예 : 로그인이 30 분간 지속되는 등).

해당 문자열을 가져 와서 해시합니다.요청이 사이트를 칠 때, 쿠키를 확인

(자바,하지 않는 것이 중요 THO) 다음

String cookie = userid + ":" + timeString + ":" + md5(userid + ":" + timeString + ":" + "secretpassword"); 

. 먼저 무결성을 확인하십시오.

String parts[] = cookie.split(":"); 
String newHash = md5(parts[0] + ":" + parts[1] + ":" + "secret password"); 
if (!newHash.equals(parts[2])) { 
    // boom, cheater! 
} 

그런 다음 시간 문자열을 확인하여 여전히 "로그인되어 있는지"확인하고 거기에서 이동하십시오.

요청할 때마다 쿠키를 업데이트 할 시간이 있는지 확인하십시오.

+1

이것은 꽤 나쁜 습관이지만, 현명한 보안입니다. 누구나 비밀 번호가 유출되면 누구나 앱에 로그인 할 수 있습니다. 약 해지면 (특히 MD5가 사라지는 동안) 금이 갈 수 있습니다. 이 방법을 사용하려면 최소한 모든 사용자에게 서로 다른 임의의 "비밀"을 사용하십시오. 그건 훨씬 더 안전 할거야. –

+0

인증 세션마다 다른 사용자 별 키 관리 방법은 무엇입니까? – yfeldblum

+0

이것이 핵심적인 제어 문제입니다. 암호화와 관련하여 동일한 문제가 있습니다. MD5가 마음에 들지 않는다. SHA를 골라라. 그것은 기술의 한 예입니다. –

관련 문제