잊지 않겠습니다.

web에서 인증을 도와주고, 인증을 이용한 ActionFilter를 제공한다. 

  

1. web.config의 설정

   <authentication mode="Forms">
      <forms loginUrl="~/NotLogOn" />
    </authentication>

authentication mode는 반드시 Forms로 해주고, authorize가 되어있지 않는 경우에 돌아갈 url을 설정한다.

  

2. Login 정보 입력

FormsAuthentication 을 이용해서 user정보를 저장하는 cookie 값을 이용한다.  

   public interface IFormsAuthentication
    {
        void SetAuthCookie(string userName, bool createPersistentCookie);
        void SignOut();
    }
    public class FormsAuthenticationWrapper : IFormsAuthentication
    {
        public void SetAuthCookie(string userName, bool createPersistentCookie)
        {
            FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
        }
        public void SignOut()
        {
            FormsAuthentication.SignOut();
        }
    } 

  

3. Login 정보 입력 부분 구현

       public ActionResult Logon(string userName, string password, string saveCookie)
        {
            if(Request.HttpMethod != "POST")
            {
                return Redirect("/Logon/Index");
            }
            HostwayMembership membership = new HostwayMembership();
            if( membership.ValidateUser(userName, password) )
            {
                FormsAuth.SetAuthCookie(userName, saveCookie == "on");
                csDB.CreateCSEvent(userName, com.hostway.lib.SYNCmail.Database.CSEventCase.CSUserLogin, userName,
                                   "Logon", "Logon user");
                csDB.OnSubmit();
                return Redirect("/Home/Index");
            }
            else
            {
                return Redirect("/Logon/Index");
            }
        }

  

4. 인증이 필요한 controller, 또는 action에 attribute 적용

   [Authorize(Order=0)][AuthActionFilter(Order=1)]
    public class UserController : SYNCmailController
    [Authorize]
    public ActionResult List(int? pageNumber, int? eventPageNumber)

  

controller에 적용되는 경우에는 모든 action에 일괄적으로 적용되게 된다. 

이때에, Order 순서를 정해서 적용될 ActionFilter의 순서를 결정할 수 있다.

  

또한, 아래와 같이 user 또는 , Role에 대해서도 역시 같은 적용이 가능하다.

[Authorize(Users="email@address.co.kr")] 
[Authorize(Roles="admin, friend")]

  

  

  

  

  

Posted by Y2K
,