본문 바로가기

SW/ASP.NET

[ASP.NET] Login & Logout - 폼 인증

1. Web.config 설정 

<authentication mode="Windows">에서 mode를 "Forms" 로 변경 

 

<forms name=".AUTHCOOKIE" loginUrl="로그인페이지" protection="ALL"/>

로그인이 안될 경우 로그인 페이지로 이동.

    1) protection은 쿠키값의 암호화및 검증 여부(ALL-암호화,검증, None-보안성 결여, 성능 높음)

    2) name 인증에 사용할 HTTP쿠키의 이름을 지정.(기본적인 이름은 .ASPXAUTH)

 

<authorization> : 권한 부여 여부 설정

 

<location> : 하위디렉토리(특정 자원)에 대한 권한을 설정

ex)

    <location path="test">    설명: test디렉토리에 대한 권한 설정 선언

        <system.web>

            <authorization>

                <allow users="admin"/>     설명 : admin 사용자만 허용

                <deny users="*"/>    설명 : *는 모든 사용자 거부,    ?는 인증되지않은 사용자를 나타냄

           </authorization>

        </system.web>

    </location>

 

 Web.config은 외부에서 접근 불가능

 

 

 

2. C#(cs코드)

System.Web.Security; 필요 (FormsAuthentication 사용을 위해)

 

FormsAuthentication : 인증 처리에 도움이 되는 정적 메서드를 제공

    SetAuthCookie(id, false)

        첫번째 인자(id)를 가지고 인증된 사용자로 만드는 역할

        두번째 인자는 쿠키를  파일쿠키로 할지 메모리쿠키로 저장할지를 선택 (false는 메모리이며 현재브라우저 종료할때까지)

    GetRedirectUrl(id, false) : 원래 요청했던 페이지의 경로를 나타냄

    RedirectFromLoginPage(id, false) : 위의 두 메소드의 기능을 합친거

    SignOut() : 로그아웃

 

    [ex] DB연결 설정후 해당 아이디에 대한 자료 유무에 따른  try~catch 처리

    try  //아이디&패스워드가 일치할 경우
    {
        con.Open(); 
        SqlDataReader reader = cmd.ExecuteReader();
        reader.Read();
        Session["id"] = reader["memberID"].ToString(); 
        FormsAuthentication.SetAuthCookie(rID, false); //쿠키에 인증된 사용자id 저장
        string url = FormsAuthentication.GetRedirectUrl(rID, false); 
        Response.Redirect(url);
    }
    catch(Exception ex) //아이디 or 패스워드가 틀리거나 다른 오류가 있을 경우 관련 오류창을 띄움
    {

        Response.Write("<script language=javascript>");
        Response.Write("alert('" + ex.Message + "' );");
        Response.Write("</script>");
    }

 

    [ex] 로그인 처리 - 쿠키 생성 : HTTP 쿠키에서 사용하기에 적합한 암호화된 폼 인증 티켓이 들어 있는 문자열을 만듭니다.

    protected void setLogin(string userID, string userName, string memberType, string userCode, string SnsGubn,string hakwonCode, string centerCode, string hakwonName, string profile, string sdate, string edate, string logoyn, string menuauth)
    {
        string strUserData = userID + ":" + userName + ":" + memberType + ":" + userCode + ":" + SnsGubn + ":" + hakwonCode + ":" + centerCode + ":" + hakwonName + ":" + profile + ":" + sdate + ":" + edate+":"+ logoyn + ":" + menuauth;

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userID, DateTime.Now, DateTime.Now.AddMinutes(300), false, strUserData, FormsAuthentication.FormsCookiePath);

        string hash = FormsAuthentication.Encrypt(ticket); //Encrypt ticket


        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
        if (ticket.IsPersistent)
            cookie.Expires = ticket.Expiration;

 

        HttpContext.Current.Response.Cookies.Add(cookie); //Create cookie
    }

 

 

 

 

 

User.Identity. : 현재 사용자 정보를 나타내는 메소드를 가짐

    IsAuthenticated : 현재 사용자가 인증된 사용자인지 확인

    Name : 현재 사용자의 ID

    AuthenticationType : 사용한 인증 형식

 

    [ex]

    if(this.Page.User.Identity.IsAuthenticated)  // 인증된 사용자일경우 true

    {

 

    }

    else //인증된 사용자가 아닐 경우 처리되는 구문

   {

   }