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")]