재우니의 블로그



펌 : http://msdn.microsoft.com/ko-kr/library/xdt4thhy(v=VS.80).aspx



이 항목의 예제에서는 간단한 ASP.NET 폼 인증 구현을 제공합니다. 이 예제에서는 폼 인증을 통해 사용자가 ASP.NET 응용 프로그램에 로그인하는 방법에 대한 기본적인 내용을 보여 줍니다.

Note참고

ASP.NET 멤버 자격 및 ASP.NET Login 컨트롤을 사용하면 간단한 방법으로 폼 인증 작업을 수행할 수 있습니다. ASP.NET 멤버 자격은 사용자 정보를 저장 및 관리할 수 있는 방법을 제공하고 사용자를 인증할 수 있는 메서드를 포함합니다. ASP.NET Login 컨트롤은 ASP.NET 멤버 자격과 함께 사용되고 사용자에게 자격 증명 정보 요청, 사용자 확인, 암호 복구 또는 바꾸기 등을 수행하는 데 필요한 논리를 캡슐화합니다. 실제로 ASP.NET 멤버 자격과 ASP.NET Login 컨트롤은 폼 인증을 통해 추상화 계층을 제공하고, 폼 인증을 사용하기 위해 일반적으로 수행해야 하는 거의 모든 작업을 대신합니다. 자세한 내용은 멤버 자격을 사용하여 사용자 관리ASP.NET Login 컨트롤 개요를 참조하십시오.

이 예제 시나리오에서 사용자는 보호되는 리소스인 Default.aspx 페이지를 요청하고 jchen@contoso.com 계정과 "37Yj*99P"라는 암호를 사용하여 한 명만 이 리소스에 액세스할 수 있습니다. 사용자 이름과 암호는 Logon.aspx 파일에 하드 코드됩니다. 이 예제를 실행하려면 Web.config 파일, Logon.aspx 페이지, Default.aspx 페이지라는 세 개의 파일이 필요합니다. 이러한 파일은 응용 프로그램 루트 디렉터리에 있습니다.

폼 인증을 위해 응용 프로그램을 구성하려면

  1. 응용 프로그램 루트에 Web.config 파일이 있으면 이 파일을 엽니다.

  2. 응용 프로그램의 루트 폴더에 Web.config 파일이 없으면 Web.config라는 텍스트 파일을 만들어 다음 요소를 추가합니다.

    <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> </system.web> </configuration>
  3. 다음 예제와 같이 system.web 요소 내에 authentication 요소를 만들고 mode 특성을 Forms로 설정합니다.

    <system.web> <authentication mode="Forms"> </authentication> </system.web>
  4. authentication 요소 내에 forms 요소를 만들고 다음 특성을 설정합니다.

    • loginUrl   "Logon.aspx"로 설정합니다. Logon.aspx는 ASP.NET이 요청에서 인증 쿠키를 찾지 못할 경우 리디렉션에 사용할 URL입니다.

    • name   ".ASPXFORMSAUTH"로 설정합니다. 이렇게 하면 인증 티켓을 포함하는 쿠키의 이름에 사용할 접미사가 설정됩니다.

    <system.web> <authentication mode="Forms"> <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> </system.web>
  5. system.web 요소 내에 authorization 요소를 만듭니다.

    <system.web> <authentication mode="Forms"> <forms loginUrl="Logon.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> <authorization> </authorization> </system.web>
  6. authorization 요소 내에 deny 요소를 만들고 users 특성을 "?"로 설정합니다. 이렇게 하면 인증되지 않은 사용자("?"로 나타냄)가 이 응용 프로그램의 리소스에 액세스할 수 없도록 지정됩니다.

    <system.web> <authentication mode="Forms"> <forms loginUrl="logon.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> <authorization> <deny users="?" /> </authorization> </system.web>
  7. Web.config 파일을 저장한 다음 닫습니다.

로그온 페이지 만들기

인증되지 않은 사용자가 웹 사이트에서 페이지를 요청할 경우 이러한 사용자는 Logon.aspx 페이지로 리디렉션됩니다. 이전에 Web.config 파일에서 이 파일 이름을 지정했습니다.

Logon.aspx 페이지에서는 사용자 자격 증명(전자 메일 주소와 암호)을 수집하고 사용자를 인증합니다. 사용자가 인증되면 로그온 페이지에서는 처음에 요청했던 페이지로 사용자를 리디렉션합니다. 이 예제에서는 올바른 자격 증명이 페이지 코드에 하드 코드되어 있습니다.

Security note보안 참고

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다. 기본적으로 ASP.NET 페이지에서는 사용자 입력 내용에 스크립트나 HTML 요소가 포함되어 있지 않은지 유효성을 검사합니다. 자세한 내용은 스크립트 악용 개요를 참조하십시오.

로그온 페이지를 만들려면

  1. 응용 프로그램 루트 폴더에 Logon.aspx라는 ASP.NET 페이지를 만듭니다.

  2. 다음 태그와 코드를 페이지에 복사합니다.



    <%@ 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>

    이 페이지에는 사용자 정보를 수집하는 ASP.NET 서버 컨트롤과 사용자가 로그인 자격 증명을 저장하기 위해 클릭하는 확인란이 포함되어 있습니다. 로그온 단추의 Click 처리기에는 하드 코드된 값과 사용자의 전자 메일 주소 및 암호를 비교하여 확인하는 코드가 포함되어 있습니다. 암호는 영문자를 제외한 다양한 문자가 포함된 강력한 암호이고 8자 이상입니다. 사용자의 자격 증명 정보가 올바르면 코드에서는 FormsAuthentication 클래스의 RedirectFromLoginPage 메서드를 호출하고 사용자 이름과 부울 값(확인란에서 파생됨)을 메서드에 전달합니다. 전달되는 부울 값은 인증 티켓을 쿠키로 유지할지 여부를 나타냅니다. 이 메서드는 처음에 요청했던 페이지로 사용자를 리디렉션합니다. 사용자의 자격 증명이 일치하지 않으면 오류 메시지가 표시됩니다. 페이지에서는 FormsAuthentication 클래스가 포함된 System.Web.Security 네임스페이스를 가져옵니다.

기본 페이지 만들기

이 예제에서는 응용 프로그램 루트 폴더에 ASP.NET 페이지를 만듭니다. 인증되지 않은 모든 사용자는 응용 프로그램의 ASP.NET 리소스(.aspx 파일은 포함되지만 이미지, 음악 등의 멀티미디어 파일이나 HTML 파일 같은 정적 파일은 제외)에 액세스할 수 없도록 구성 파일에 지정했으므로 사용자가 페이지를 요청하면 폼 인증에서는 사용자의 자격 증명을 확인한 후 해당 사용자를 로그온 페이지로 리디렉션합니다(필요한 경우). 또한 여기서 만든 페이지를 통해 사용자를 로그아웃하여 영구적인 인증 티켓(쿠키)을 지울 수도 있습니다.

기본 페이지를 만들려면

  1. 응용 프로그램 루트 폴더에 Default.aspx라는 ASP.NET 페이지를 만듭니다.

  2. 다음 태그와 코드를 페이지에 복사합니다.




    <%@ 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를 지우고 인증 티켓(쿠키)을 제거하는 코드가 포함되어 있습니다. 그런 다음 사용자가 로그온 페이지로 리디렉션됩니다.