C #.net을 사용 하 여 ASP.NET 응용 프로그램에서 폼 기반 인증을 구현 하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 301240 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR301240
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 폼 기반을 구현 하는 방법을 보여 줍니다. 사용자가 저장 하는 데이터베이스를 사용 하 여 인증 합니다.

요구 사항

다음은 권장된 하드웨어, 소프트웨어 개요 네트워크 인프라 및 필요한 서비스 팩:
  • Microsoft Visual Studio.NET
  • Microsoft 인터넷 정보 서비스 (IIS) 버전 5.0 또는 그 이상
  • Microsoft SQL Server

C#.net을 사용 하 여 ASP.NET 응용 프로그램 만들기

  1. Visual Studio.net을 엽니다.
  2. 새 ASP.NET 웹 응용 프로그램을 만들고 이름을 지정 합니다. 위치 하 고 있습니다.

Web.config 파일의 보안 설정 구성

이 섹션에서는 추가 하 고 수정 하는 방법을 보여 줍니다 있는 <authentication></authentication><authorization></authorization> ASP.NET 응용 프로그램을 구성 하는 구성 섹션 폼 기반 인증을 사용 합니다.
  1. 솔루션 탐색기에서 Web.config 파일을 엽니다.
  2. 인증 모드를 변경 합니다.
  3. <Forms>태그를 삽입 하 고 적절 한 채우기 특성입니다. (이러한 특성에 대 한 자세한 내용은 MSDN을 참조 하십시오 설명서를 참조 하거나 나열 된 퀵 스타트 설명서를 </Forms>참조 구역입니다.) 복사는 다음 코드를 클릭 하 고 HTML로 붙여넣기편집 코드에 붙여 넣으려면 메뉴는 <authentication></authentication> 파일의 섹션:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. 익명 사용자에 게 액세스를 거부의 <authorization></authorization> 는 다음과 같이 섹션:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

사용자 정보를 저장 하기 위한 예제 데이터베이스 테이블 만들기

이 단원에서는 샘플 데이터베이스를 만드는 방법을 보여 줍니다. 사용자 이름, 암호 및 사용자 역할을 저장 합니다. 역할 열이 필요 역할 기반 데이터베이스에 사용자 역할을 저장 하 고 구현 하려는 경우 보안입니다.
  1. 시작 메뉴를 클릭실행를 클릭 하 고 다음을 입력 메모장 열 수 메모장입니다.
  2. 다음 SQL 스크립트 코드를 강조 표시 하 고 마우스 오른쪽을 코드 및 클릭 복사. 메모장에서를 클릭 합니다.붙여넣기편집 다음 붙여넣기 메뉴 코드:
    if exists (select * from sysobjects where id = 
    object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Users]
    GO
    CREATE TABLE [dbo].[Users] (
       [uname] [varchar] (15) NOT NULL ,
       [Pwd] [varchar] (25) NOT NULL ,
       [userRole] [varchar] (25) NOT NULL ,
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Users] WITH NOCHECK ADD 
       CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED 
       (
          [uname]
       )  ON [PRIMARY] 
    GO
    
    INSERT INTO Users values('user1','user1','Manager')
    INSERT INTO Users values('user2','user2','Admin')
    INSERT INTO Users values('user3','user3','User')
    GO
    					
  3. 파일을 Users.sql로 저장 합니다.
  4. Microsoft SQL Server 컴퓨터에서 Users.sql를 엽니다 쿼리 분석기입니다. 데이터베이스 목록에서를 클릭 합니다. pubs및 스크립트를 실행 합니다. 이 샘플에서는 사용자가 표를 만들고에 테이블을 채웁니다. 이 샘플 응용 프로그램에 사용할 Pubs 데이터베이스.

Logon.aspx 페이지 만들기

  1. 이라는 프로젝트에 새 Web Form을 추가 합니다. Logon.aspx입니다.
  2. 편집기에서 Logon.aspx 페이지를 열고 HTML로 전환 합니다. 보기입니다.
  3. 다음 코드를 복사 하 여 으로 붙여 넣습니다. HTML 옵션에 편집 코드를 삽입할 메뉴 사이<form>태그: </form>
    <h3>
       <font face="Verdana">Logon Page</font>
    </h3>
    <table>
       <tr>
          <td>Email:</td>
          <td><input id="txtUserName" type="text" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
               Display="Static" ErrorMessage="*" runat="server" 
               ID="vUserName" /></td>
       </tr>
       <tr>
          <td>Password:</td>
          <td><input id="txtUserPass" type="password" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
              Display="Static" ErrorMessage="*" runat="server" 
              ID="vUserPass" />
          </td>
       </tr>
       <tr>
          <td>Persistent Cookie:</td>
          <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
          <td></td>
       </tr>
    </table>
    <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
    <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />
    						
    이 웹 양식은 들 수 있도록 사용자에 게 로그온 폼을 제공 하는 사용자 이름 및 응용 프로그램에 로그온 할 때 암호를 제공 합니다.
  4. 디자인 보기로 전환 하 고 페이지를 저장 합니다.

사용자 자격 증명의 유효성을 검사 하도록 이벤트 처리기 코딩

이 섹션은 코드 숨김에 배치 되는 코드 제공 (Logon.aspx.cs) 페이지입니다.
  1. 두 번 클릭 로그온 열 수 있는 Logon.aspx.cs 파일입니다.
  2. 코드 숨김 파일에서 필요한 네임 스페이스를 가져옵니다.
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. 사용자 자격 증명의 유효성을 검사 하는 ValidateUser 함수 만들기는 데이터베이스입니다. (가리키도록 연결 문자열을 변경 하 여 데이터베이스)입니다.
    private bool ValidateUser( string userName, string passWord )
    {
    	SqlConnection conn;
    	SqlCommand cmd;
    	string lookupPassword = null;
    
    	// Check for invalid userName.
    	// userName must not be null and must be between 1 and 15 characters.
    	if ( (  null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
    		return false;
    	}
    
    	// Check for invalid passWord.
    	// passWord must not be null and must be between 1 and 25 characters.
    	if ( (  null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
    		return false;
    	}
    
    	try
    	{
    		// Consult with your SQL Server administrator for an appropriate connection
    		// string to use to connect to your local SQL Server.
    		conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
    		conn.Open();
    
    		// Create SqlCommand to select pwd field from users table given supplied userName.
    		cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
    		cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
    		cmd.Parameters["@userName"].Value = userName;
    
    		// Execute command and fetch pwd field into lookupPassword string.
    		lookupPassword = (string) cmd.ExecuteScalar();
    
    		// Cleanup command and connection objects.
    		cmd.Dispose();
    		conn.Dispose();
    	}
    	catch ( Exception ex )
    	{
    		// Add error handling here for debugging.
    		// This error message should not be sent back to the caller.
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
    	}
    
    	// If no password found, return false.
    	if ( null == lookupPassword ) 
    	{
    		// You could write failed login attempts here to event log for additional security.
    		return false;
    	}
    
    	// Compare lookupPassword and input passWord, using a case-sensitive comparison.
    	return ( 0 == string.Compare( lookupPassword, passWord, false ) );
    
    }
    					
  4. 폼을 생성 하려면 두 가지 방법 중 하나를 사용할 수 있습니다. 인증 쿠키와 cmdLogin_ServerClick 이벤트를 적절 한 페이지로 사용자를 이동 합니다. 샘플 코드는 두 시나리오 모두에 대해 제공 됩니다. 중 하나를 사용합니다 이러한 요구 사항에 따라입니다.
    • 폼 인증 쿠키를 자동으로 생성 하는 RedirectFromLoginPage 메서드를 호출 하 고 cmdLogin_ServerClick 이벤트를 적절 한 페이지로 사용자를 리디렉션합니다.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
      if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
      	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
      		chkPersistCookie.Checked);
      	else
      		Response.Redirect("logon.aspx", true);
      }
      						
    • 인증 티켓을 생성 하 고, 암호화, 만들기 쿠키를 응답에 추가 하 고 사용자를 리디렉션할 합니다. 이렇게 하면 더 있습니다. 쿠키 만들기를 제어 합니다. 따라 사용자 지정 데이터가 포함 될 수도 있습니다. FormsAuthenticationTicket 을 여기서.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
         if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
         {
            FormsAuthenticationTicket tkt;
            string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
      DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            if (chkPersistCookie.Checked)
            ck.Expires=tkt.Expiration;	
      		    ck.Path = FormsAuthentication.FormsCookiePath; 
            Response.Cookies.Add(ck);
      
            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if (strRedirect==null)
                  strRedirect = "default.aspx";
               Response.Redirect(strRedirect, true);
         }
         else
            Response.Redirect("logon.aspx", true);
      }
      						
  5. Web Form 디자이너에서 생성 하는 코드를 InitializeComponent 메서드 다음 코드 추가 되었는지 확인 합니다.
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Default.aspx 페이지 만들기

이 섹션에 사용자가 리디렉션되는 테스트 페이지를 만듭니다. 인증 된 후. 첫 번째 로그온 하지 않고이 페이지로 사용자를 이동 하는 경우 응용 프로그램에는 로그온 페이지로 리디렉션됩니다.
  1. 기존 WebForm1.aspx 페이지 Default.aspx로 이름을 변경 하 고 편집기에서 엽니다.
  2. HTML 뷰로 전환 하 고 사이 다음 코드를 복사 합니다. 는<form>태그: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    이 단추 해제 폼 인증 로그온 사용 됩니다. 세션입니다.
  3. 디자인 보기로 전환 하 고 페이지를 저장 합니다.
  4. 코드 숨김 파일에서 필요한 네임 스페이스를 가져옵니다.
    using System.Web.Security;
    					
  5. 로그 열기 코드 숨김 페이지 (Default.aspx.cs) 및 복사를 두 번 클릭 하 여 cmdSignOut_ServerClick 이벤트 처리기에서 다음 코드는
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Web Form 디자이너에서 생성 하는 코드를 InitializeComponent 메서드 다음 코드 추가 되었는지 확인 합니다.
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. 저장 하 고 프로젝트를 컴파일하십시오. 이제 사용할 수 있는 응용 프로그램입니다.

추가 참고 사항

  • 데이터베이스에 암호를 안전 하 게 저장 할 수 있습니다. 사용자 FormsAuthentication 클래스 유틸리티 함수가 HashPasswordForStoringInConfigFile 라는 데이터베이스에 저장 하기 전에 암호를 암호화할 수 있습니다 또는 구성 파일입니다.
  • SQL 연결 정보를 저장할 수 있습니다는 구성 파일 (Web.config)을 쉽게 하는 경우 수정할 수 있도록 필요 합니다.
  • 해커를 막는 코드를 추가 고려할 수 있습니다. 로그온 암호의 다른 조합을 사용 합니다. 예를 들어, 만 두 개 또는 세 개의 로그온 시도 허용 하는 논리를 포함 합니다. 사용자가 없는 경우 가 특정 횟수의 로그온, 원하는 플래그를 설정 하는 데이터베이스에서는 사용자가 자신의 사용자를 다시 활성화할 때까지 로그온 할 수 없도록 다른 페이지를 방문 하거나 지원 계정입니다. 에서 또한 해당 오류를 추가 해야 어디 처리 필요 합니다.
  • 인증을 기반으로 사용자가 식별 되기 때문에 쿠키, 따라서이 응용 프로그램에 보안 소켓 계층 (SSL)을 사용 할 수 있습니다. 다른 모든 다른 유용 하 고 인증 쿠키를 속일 수 있습니다. 전송 되는 정보입니다.
  • 폼 기반 인증에 클라이언트에 동의 해야 또는 브라우저에서 쿠키를 사용 합니다.
  • 시간 초과 매개 변수는 <authentication></authentication> 구성 섹션의 간격을 제어는 인증 쿠키가 다시 생성 됩니다. 제공 하는 값을 선택할 수 있습니다. 성능 및 보안 향상입니다.
  • 특정 중간 프록시와 캐시에서 인터넷을 수 있습니다. 그런 다음 Set-cookie 헤더를 포함 하는 웹 서버 응답이 다른 사용자에 게 반환 합니다. 폼 기반 인증 쿠키를 사용 하기 때문에 사용자를 인증 하려면이 사용자에 게 실수로 (또는 고의로) 발생할 수 있습니다. 쿠키에서 중간 프록시를 수신 하 여 다른 사용자를 가장 하거나 처음에 의도 하지 않은 캐시 합니다.

참조

간단한 구현 하는 방법에 대 한 자세한 내용은 사용 하 여 폼 기반 인증의 <credentials></credentials> 섹션에서 사용자 이름 및 암호를 저장 하려면 다음을 참조 하십시오 GotDotNet ASP.NET QuickStart 샘플:
폼 기반 인증
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
폼 기반을 구현 하는 방법에 대 한 자세한 내용은 사용자 이름 및 암호를 저장 하는 XML 파일을 사용 하는 인증을 참조 하십시오 있는 다음 항목에는.NET Framework 소프트웨어 개발 키트 (SDK) 설명서:
XML 사용자 파일을 사용한 폼 인증
http://msdn2.microsoft.com/en-us/library/1b1y85bh (vs.71).aspx
ASP.NET 웹 응용 프로그램 보안에 대 한 자세한 내용은 다음 Microsoft.NET Framework 개발자 가이드를 참조 하십시오. 설명서:
ASP.NET 웹 응용 프로그램 보안
http://msdn2.microsoft.com/en-us/library/330a99hc (vs.71).aspx
System.Web.Security 네임 스페이스에 대 한 자세한 내용은 다음 Microsoft.NET Framework 참조 하십시오. 참조 설명서:
System.Web.Security 네임 스페이스
http://msdn2.microsoft.com/en-us/library/system.web.security (vs.71).aspx
ASP.NET 구성에 대 한 자세한 내용은 참조 하십시오 있는 다음 Microsoft.NET Framework 개발자 가이드 문서:
ASP.NET 구성
http://msdn2.microsoft.com/en-us/library/aa719558 (VS.71).aspx

ASP.NET 구성 섹션입니다.
http://msdn2.microsoft.com/en-us/library/w7w4sb0w (vs.71).aspx
ASP.NET 보안 지침에 대 한 정보를 참조 하십시오 다음 MSDN 백서:
ASP.NET에서 인증:.NET 보안 지침
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

속성

기술 자료: 301240 - 마지막 검토: 2012년 11월 15일 목요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
키워드:?
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:301240

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com