MSDN : http://msdn.microsoft.com/en-kr/library/xdt4thhy.aspx

폼 인증 구현하기

[Web.config 설정]

1. Web.config 파일에 추가
 
<system.web>
  <authentication mode="Forms">  </authentication>
</system.web>

2. authentication 요소 내에 forms 요소를 만들고 다음 특성을 설정한다.

loginUrl : ASP.NET이 요청에서 인증 쿠키를 찾기 못할 경우 리디렉션에 사용할 URL
defaultUrl : 인증 후 리디렉션 되는 URL
domain : 보내는 폼 인증 쿠키에 설정할 선택적 도메인 지정
            (httpCookies 요소에 사용되는 도메인보다 우선)
name : 인증 타켓을 포함하는 쿠키의 이름에 사용할 접미사 설정
           (기본값은 ".ASPXAUTH")
protection : 쿠키에 사용되는 암호화 유형을 지정
 ALL - 데이터 유효성 검사 및 암호화를 모두 사용 하여 쿠키를 보호
 Encryption - 개인 설정 정보를 제공할 경우에만 쿠키를 사용하고 보안 요구 사항이 낮은 사이트에
  대해서는 암호화와 유효성 검사를 모두 해제하도록 지정
slidingExpiration : 상대 만료의 설정 여부를 지정. 
  상대 만료는 단일 세션 동안 각 요청에 대해 쿠키가 만료하도록 활성인증 시간을
  다시 설정.
 timeout : 쿠키가 만료될 때까지의 시간(분)을 정수 단위로 지정합니다. 
 SlidingExpiration 특성이 true이면 timeout특성은 가변 값이 되며
 마지막 요청을 받은 후 지정된 시간이 경과 하면 만료됩니다.
 성능 저하를 방지하고 쿠키 경고가 설정된 사용자에게 여러 개의
 브라우저 경고가 나타나지 않도록 하기 위해 지정된 시간에서 50%가
 경과하면 쿠키가 업데이트 됩니다. 기본값은 30분 입니다.

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Logon.aspx" protection="Encryption" ></forms>
  </authentication>
</system.web>

3. authorization 요소 추가

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Logon.aspx"  protection="Encryption" ></forms>
  </authentication>
  <authorization>  </authorization>
</system.web>

4. authorization 요소 내에 deny요소를 만들고 users 특성을 "?" 로 설정합니다. 이렇게 하면 인증되지 않은 사용자("?"로 나타냄)가 이 응용 프로그램의 리소스에 액세스할 수 없도록 지정됩니다.

<system.web>
  <authentication mode="Forms">
    <forms loginUrl="logon.aspx"  protection="Encryption" ></forms>
  </authentication>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

[로그온 페이지 만들기]

1. 위에서 설정한 loginUrl 페이지


<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<script runat="server">
  void Logon_Click(object sender, EventArgs e)
  {
    if ((UserEmail.Text == "jchen@contoso.com") &&
            (UserPass.Text == "37Yj*99Ps"))
      {
          FormsAuthentication.RedirectFromLoginPage
             (UserEmail.Text, Persist.Checked);
      }
      else
      {
          Msg.Text = "Invalid credentials. Please try again.";
      }
  }
</script>
<html>
<head id="Head1" runat="server">
  <title>Forms Authentication - Login</title>
</head>
<body>
  <form id="form1" runat="server">
    <h3>
      Logon Page</h3>
    <table>
      <tr>
        <td>
          E-mail address:</td>
        <td>
          <asp:TextBox ID="UserEmail" runat="server" /></td>
        <td>
          <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
            ControlToValidate="UserEmail"
            Display="Dynamic"
            ErrorMessage="Cannot be empty."
            runat="server" />
        </td>
      </tr>
      <tr>
        <td>
          Password:</td>
        <td>
          <asp:TextBox ID="UserPass" TextMode="Password"
             runat="server" />
        </td>
        <td>
          <asp:RequiredFieldValidator ID="RequiredFieldValidator2"
            ControlToValidate="UserPass"
            ErrorMessage="Cannot be empty."
            runat="server" />
        </td>
      </tr>
      <tr>
        <td>
          Remember me?</td>
        <td>
          <asp:CheckBox ID="Persist" runat="server" /></td>
      </tr>
    </table>
    <asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"
       runat="server" />
    <p>
      <asp:Label ID="Msg" ForeColor="red" runat="server" />
    </p>
  </form>
</body>
</html>


2. 인증되지 않은 사용자에 대한 Default 페이지

<%@ Page Language="C#" %>
<html>
<head>
  <title>Forms Authentication - Default Page</title>
</head>
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    Welcome.Text = "Hello, " + Context.User.Identity.Name;
  }
  void Signout_Click(object sender, EventArgs e)
  {
    FormsAuthentication.SignOut();
    Response.Redirect("Logon.aspx");
  }
</script>
<body>
  <h3>
    Using Forms Authentication</h3>
  <asp:Label ID="Welcome" runat="server" />
  <form id="Form1" runat="server">
    <asp:Button ID="Submit1" OnClick="Signout_Click"
       Text="Sign Out" runat="server" /><p>
  </form>
</body>
</html>

페이지에 사용자의 인증된 ID가 표시됩니다. 이 ID는 FormsAuthentication 클래스를 통해 설정되고 ASP.NET 페이지에서 Context.User.Identity.Name 속성으로 사용할 수 있습니다. 로그아웃 단추의 Click 처리기에는 SignOut 메서드를 호출하여 사용자 ID를 지우고 인증 티켓(쿠키)을 제거하는 코드가 포함되어 있습니다. 그런 다음 사용자가 로그온 페이지로 리디렉션됩니다.

+ Recent posts