[C#/ASP.NET] 폼 인증 방식으로 로그인 관리 및 체크하기
로그인 관리
1. FormsAuthentication
- 웹 응용 프로그램에서 사용자 Forms 인증 및 세션 관리를 위한 클래스
- 사용자의 로그인 상태를 관리하고 사용자를 인증하는 데 사용됨
Forms 인증은 사용자가 웹 애플리케이션에 로그인하고 인증된 사용자로 세션을 유지하는 데 도움을 줍니다. 이를 통해 사용자는 로그인한 상태에서 특정 페이지에 엑세스할 수 있습니다. Forms 인증은 사용자의 인증 정보를 암호화된 쿠키에 저장하여 로그인 상태를 추적하고 웹 페이지 요청마다 사용자를 식별합니다.
2. SetAuthCookie
- 사용자를 성공적으로 인증하고 인증 쿠키를 설정하는 데 사용
- 사용자의 식별 정보를 쿠키에 저장하고 사용자가 재인증 없이 애플리케이션 내에서 세션을 관리할 수 있게 함
SetAuthCookie 메서드를 사용하면 웹 응용프로그램에서 사용자를 인증한 후에 해당 사용자에 대한 인증 쿠키를 설정할 수 있습니다. 사용자의 식별 정보를 쿠키로 저장하고, 그다음 요청에서 해당 쿠키를 검사하여 사용자를 인증할 수 있습니다. 이를 통해 사용자의 상태를 유지합니다.
public static void SetAuthCookie (string userName, bool createPersistentCookie);
public static void SetAuthCookie (string userName, bool createPersistentCookie, string strCookiePath);
- userName : 인증된 사용자의 이름
- createPersistentCookie : true이면 브라우저 세션 전반에 걸쳐 저장되는 영구 쿠키 생성. 그렇지 않으면 False
- strCookiePath : Forms 인증 쿠키의 경로
2-1. userName
두 개의 메서드로 오버로드되어 있으며, 첫 번째 변수 userName은 Forms 인증 쿠키의 값으로 설정됩니다. 이 값은 사용자를 고유하게 식별하는 데 사용됩니다. 사용자가 로그인할 때 이 값은 쿠키에 저장되고, 사용자의 브라우저가 서버로 요청을 보낼 때마다 이 쿠키가 함께 전송되어 사용자를 인증하는 데 사용됩니다.
FormsAuthentication.SetAuthCookie("cobook", false);
2-2. createPersistentCookie
두 번째 변수인 createPersistentCookie는 Forms 인증 쿠키가 persistent 쿠키로 설정될지 여부를 나타내는 Boolean 값입니다. 이를 통해 웹 응용프로그램의 요구 사항에 맞게 Forms 인증 쿠키의 지속성을 구성할 수 있습니다.
- true로 설정하면 "persistent cookie"로 생성됩니다. 이렇게 생성된 쿠키는 브라우저를 닫아도 유지되며, 만료 기간을 설정할 수 있습니다. 사용자가 로그인 상태를 유지하고 싶을 때 주로 사용됩니다. 사용자가 로그아웃하거나 만료 기간이 경과할 때까지 유지됩니다.
- false로 설정하면 "session cookie"로 생성됩니다. 이 쿠키는 사용자의 브라우저 세션 동안만 유지되며, 브라우저를 닫으면 즉시 삭제됩니다. 사용자가 브라우저를 종료하면 자동으로 로그아웃되는 것처럼 동작합니다.
2-3. strCookiePath
세 번째 매개변수인 strCookiePath는 Forms 인증 쿠키의 경로를 지정하는 데 사용됩니다. 이 매개변수를 통해 쿠키가 어떤 경로에서만 유효한지를 제어할 수 있습니다. 일반적으로 웹 응용 프로그램의 루트 경로("/")에서 유효하며, 따라서 모든 페이지에서 사용자 인증 상태를 공유할 수 있습니다. 그러나 경우에 따라서는 특정 디렉터리나 경로에서만 사용자 인증을 유지하도록 쿠키를 설정하고 싶을 수 있습니다.
FormsAuthentication.SetAuthCookie("username", false, "/");
FormsAuthentication.SetAuthCookie("username", true, "/secure");
위 코드에서 strCookiePath는 "/secure"로 설정되어 있으므로 쿠키는 "/secure" 경로에서만 유효합니다. 이렇게 설정하면 다른 경로에서는 해당 쿠키를 볼 수 없으며 사용자 인증 상태를 공유하지 않습니다. 이렇게 경로를 설정하는 것은 보안 및 세분화된 접근 제어에 도움이 될 수 있습니다.
2-4. 쿠키 이름
FormsAuthentication.SetAuthCookie로 생성된 쿠키의 이름은 "ASPXAUTH"입니다. 설정을 변경하려면 forms 요소의 name 속성을 웹 구성파일(Web.config)에 정의된 다른 이름으로 변경해야 합니다.
<authentication mode="Forms">
<forms name="MyCustomAuthCookie" ... />
</authentication>
위와 같이 설정하면 "ASPXAUTH" 대신 "MyCustomAuthCookie"라는 이름의 쿠키가 생성됩니다. 쿠키 이름을 변경하려면 해당 웹 구성 파일을 수정하고 원하는 이름을 설정하면 됩니다. 쿠키 이름뿐만 아니라 암호화에 사용되는 키, 로그인 페이지 URL, 세션 타임아웃 등을 설정할 수 있습니다.
3. SignOut
SignOut 메서드는 현재 사용자를 로그아웃시키고 인증 쿠키를 제거하는 데 사용되는 메서드입니다.
FormsAuthentication.SignOut();
SignOut 메서드를 호출하면 다음과 같은 작업이 수행됩니다.
- 현재 사용자의 인증 상태가 해제
- Forms 인증 쿠키가 만료되어 무효화, 제거됨
- 설정에 따라 로그아웃된 사용자를 해당 페이지로 redirection
// 사용자를 로그인 상태로 만들기 위해 SetAuthCookie 메서드를 사용
FormsAuthentication.SetAuthCookie("사용자이름", false);
// 사용자를 로그아웃 상태로 만들려면 SignOut 메서드를 사용
FormsAuthentication.SignOut();
로그인 체크
4. IsAuthenticated
사용자 인증 여부를 체크하기 위해 HttpContext.User.Identity.IsAuthenticated를 사용할 수 있습니다. 이 값은 현재 요청된 페이지나 리소스에 대한 사용자의 인증상태를 나타내며, 사용자가 인증되었으면 true이고, 인증되지 않았다면 false입니다. 이를 기반으로 사용자의 로그인 여부를 확인하고 인증된 사용자에 대한 접근 제어 및 로직을 구현할 수 있습니다.
if (HttpContext.User.Identity.IsAuthenticated)
{
// 사용자가 인증되었을 때 수행할 작업
}
else
{
// 사용자가 인증되지 않았을 때 수행할 작업
}
참고
http://www.egocube.pe.kr/translation/content/asp-net-web-api/201401270001