티스토리 뷰

자료/ASP.NET

ASP.NET 인증 (Web.config)

네오블루 2008. 3. 15. 00:00

ASP.NET 인증 (Web.config)


1. 무인증


2. Windows 인증

   1) web.config : <authentication mode="Windows" />

   2) IIS -> 해당 웹사이트 속성 -> 디렉터리 보안 -> 인증 및 액세스 제어 : 편집 -> 익명 액세스 가능 : 체크 제거


3. Form 인증 : 인증쿠키를 client에 심어서 인증을 확인.***
   1) web.config : 응용 프로그램의 인증 정책을 설정
      <authentication mode="Forms">
          <form s name=".AUTHCOOKIE" loginUrl="Login.aspx" protection="All" timeout="30"/>
      </authentication>


      - name : 인증 쿠키명
      - loginUrl : 인증 안되면 이동되는 페이지
      - protection : 암호화(All, SHA1, MD5)

  - timeout 은 기본 30분
      - 기존에 페이지 마다 로그인 유무를 확인하는 구문을 넣어 주었는데....loginUrl로 인해서...그런 노가다는 안해도 된다...^^


   2) web.config : 응용 프로그램의 권한 부여 정책 설정
      - 적은 범위의 user표현이 먼저 와야 한다.  위에는 모든 user 허용
         <authorization>
            <allow users="*" />
            <deny users="test"/>
         </authorization>


      -  위에서 test라는 user를 제외 시킬려면....
         <authorization>
            <allow users="*" />
            <deny users="test"/>
         </authorization>


      - 익명 사용자 허용 안함
         <authorization>
           <deny users="?"/>
         </authorization>

   3) 인증후 쿠키 심기

      - FormsAuthentication.SetAuthCookie(this.TextBox1.Text,false); : 메모리 쿠키
      - FormsAuthentication.SetAuthCookie(this.TextBox1.Text,true);   : hard 쿠키


   4) 인증후 전 페이지로 이동하기

      - Response.Redirect(FormsAuthentication.GetRedirectUrl(this.TextBox1.Text,false));

      -http://localhost/Soo/Login.aspx?ReturnUrl=%2fSoo%2fWebForm9.aspx

         => 인증이 안된 상태에서 WebForm9.aspx 페이지로 접근을 해서..

         =>  web.config : 응용 프로그램의 인증 정책을 설정 에서 loginUrl에서 정한 Login.aspx로 강제로 이동되었다.

         => 강제로 이동될때 처음에 접근을 했던 WebForm9.aspx페이지의 경로도 ReturnUrl=/Soo/WebForm9.aspx 같이 넘어왔다.

         => 이 경로를 가지로 인증후 전 페이지로 이동한다.(GetRedirectUrl)


   5) 인증후 쿠키심기와 전 페이지로 이동하기를 한번에 하기 (3 + 4)

      - FormsAuthentication.RedirectFromLoginPage(id,false);


   6) web.config를 이용해서 간단한 계정 관리하기

      - web.config
         <authentication mode="Forms">
             <form s name=".AUTHCOOKIE" loginUrl="Login.aspx" protection="All" timeout="30">
               <credentials passwordFormat="Clear">  --> clear : password 암호화 안함. -->SHA1--> MD5

                  <user name="test" password="111"/>
                  <user name="admin" password="111"/>
                  <user name="hong" password="111"/>
               </credentials>
            </forms>
         </authentication>

      - passwordFormat 종류
          1.Clear : 암호화 하지 않음.
          2. SHA1
          3. MD5
                  ==> 암호화 확인 방법 : FormsAuthentication.HashPasswordForStoringInConfigFile(password,"SHA1");

      - 코드비하인드 페이지

         if (FormsAuthentication.Authenticate(this.TextBox1.Text,this.TextBox2.Text))  --> web.config에 있는 user확인하는 구문.
         {
            FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,false);
            this.Label1.Text="로그인 성공";
         }
         else
         {
            this.Label1.Text="로그인 실패";
         }     

      - FormsAuthentication.Authenticate(id,pwd) : 비교후 bool값 반환

 7) 폴더, 페이지 단위로 권한 부여하기
  - web.config 페이지에서 <loaction path="폴더명 or 페이지명">로 권한 설정

  <configuration>
   <system.web>
   </system.web>

   <location path="admin">      ==> admin 폴더에 권한 설정
    <system.web>
     <authorization>
      <allow users="admin"/>
      <deny users="*"/>
     </authorization>
    </system.web>
    </location>
 
    <location path="member">       ==> member 폴더에 권한 설정
    <system.web>
     <authorization>
      <deny users="?"/>
      <allow users="*"/>  
     </authorization>
    </system.web>
    </location>

    <location path="member.aspx">    ==> member.aspx 페이지에 권한 설정
    <system.web>
     <authorization>
      <deny users="?"/>
      <allow users="*"/>  
     </authorization>
    </system.web>
    </location>
 
  </configuration>

 8) 인증 쿠키 삭제
  System.Web.Security.FormsAuthentication.SignOut(); //인증쿠키 삭제

 9) 사용자 지정 오류 메시지
  <customErrors mode="On" defaultRedirect="ErrorEx.aspx"> ==> 기본적으로 에러 발생하면 defaultRedirect에서 지정한 페이지로 이동한다.
   <error statusCode="404" redirect="NotFound.aspx"/>    ==> 특정 에러(statusCode) 발생하면 redirect에서 지정한 페이지로 이동한다.
  </customErrors>

 10) pages
  - <configuration>
    <system.web>
     <pages>

   <pages
     buffer="true|false" : URL 리소스가 응답 버퍼링을 사용할지 여부를 지정합니다.
       - true : 응답 버퍼링이 설정되었음을 나타냅니다. 
       - false : 응답 버퍼링이 해제되었음을 나타냅니다.
     enableSessionState="true|false|ReadOnly" : 세션 상태의 설정 여부를 지정합니다.
       - true : 세션 상태가 설정되었음을 나타냅니다.
       - false : 세션 상태가 해제되었음을 나타냅니다.
       - ReadOnly : 응용 프로그램에서 세션 상태 변수를 읽을 수는 있으나 수정할 수 없도록 지정합니다.
     enableViewState="true|false" : 뷰 상태의 설정 여부를 지정합니다.
       - true : 뷰 상태가 설정되었음을 나타냅니다.
       - false : 뷰 상태가 해제되었음을 나타냅니다.
     enableViewStateMac="true|false"
       : 페이지가 클라이언트로부터 다시 게시되면 ASP.NET이 페이지의 뷰 상태에 대해 MAC(메시지 인증 코드)를 실행할지 여부를 지정합니다.
         참고   뷰 상태 MAC는 브라우저에 보내질 때 페이지의 뷰 상태가 유지되는 숨겨진 변수의 암호화된 버전입니다.
         true인 경우 암호화된 뷰 상태가 클라이언트에서 변경되었는지 여부가 확인됩니다.
       - true : 뷰 상태가 설정되었음을 나타냅니다.
       - false : 뷰 상태가 MAC의 선택이 해제되었음을 나타냅니다. 기본값은 false입니다.
     autoEventWireup="true|false" : 페이지 이벤트가 자동으로 설정될지 지정합니다.
       - true : 페이지 이벤트가 자동으로 설정됨을 나타냅니다.
       - false : 페이지 이벤트가 자동으로 설정되지 않음을 나타냅니다.
     smartNavigation="true|false" : 스마트 탐색의 설정 여부를 지정합니다.
       - true : 스마트 탐색이 설정되었음을 나타냅니다.
       - false : 추적이 해제되었음을 나타냅니다. 기본값은 false입니다.
     pageBaseType="typename, assembly" : aspx 페이지가 기본적으로 상속하는 코드 숨김 클래스를 지정합니다.

     userControlBaseType="typename" : 사용자 정의 컨트롤이 기본적으로 상속하는 코드 숨김 클래스를 지정합니다.

     validateRequest="true|False" : ASP.NET이 잠재적으로 유해한 데이터를 찾기 위해 브라우저를 통한 모든 입력 내용을 검토함을 나타냅니다.
         true인 경우, 잠재적으로 유해한 값 목록에 모든 입력 데이터를 비교하여 요청 유효성 검사가 수행됩니다.
         일치하는 항목이 있으면 ASP.NET은 HttpRequestValidationException 예외를 발생시킵니다.
       - true : 브라우저를 통한 모든 입력 내용이 확인됨을 나타냅니다. 기본값은 true입니다.
       - false : 브라우저를 통한 입력 내용이 확인되지 않음을 나타냅니다.


   />


4. PassPort 인증