ASP.NET

[C#/ASP.NET] 폼 인증 방식으로 로그인 관리 및 체크하기

코북 2023. 9. 19. 14:43

 

로그인 관리

 

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 메서드를 호출하면 다음과 같은 작업이 수행됩니다.

  1. 현재 사용자의 인증 상태가 해제
  2. Forms 인증 쿠키가 만료되어 무효화, 제거됨
  3. 설정에 따라 로그아웃된 사용자를 해당 페이지로 redirection
// 사용자를 로그인 상태로 만들기 위해 SetAuthCookie 메서드를 사용
FormsAuthentication.SetAuthCookie("사용자이름", false);

// 사용자를 로그아웃 상태로 만들려면 SignOut 메서드를 사용
FormsAuthentication.SignOut();

 

 

 

 

로그인 체크

 

4. IsAuthenticated

 사용자 인증 여부를 체크하기 위해 HttpContext.User.Identity.IsAuthenticated를 사용할 수 있습니다. 이 값은 현재 요청된 페이지나 리소스에 대한 사용자의 인증상태를 나타내며, 사용자가 인증되었으면 true이고, 인증되지 않았다면 false입니다. 이를 기반으로 사용자의 로그인 여부를 확인하고 인증된 사용자에 대한 접근 제어 및 로직을 구현할 수 있습니다.

if (HttpContext.User.Identity.IsAuthenticated)
{
    // 사용자가 인증되었을 때 수행할 작업
}
else
{
    // 사용자가 인증되지 않았을 때 수행할 작업
}

 

 

 

참고

https://learn.microsoft.com/ko-kr/dotnet/api/system.web.security.formsauthentication?view=netframework-4.8.1

https://learn.microsoft.com/ko-kr/dotnet/api/system.web.security.formsauthentication.setauthcookie?view=netframework-4.8.1 

https://stackoverflow.com/questions/8660539/who-sets-the-isauthenticated-property-of-the-httpcontext-user-identity

http://www.egocube.pe.kr/translation/content/asp-net-web-api/201401270001