MVC에서 [Authorize]
속성을 사용하기 위해 읽은 적이 있습니다. 작업을 수행하거나 보안하려는 컨트롤러 클래스 위에 배치하면됩니다.MVC3에서 권한 부여 방법을 사용하는 방법
내 질문은 : Authorize
사용자가 로그인했는지 여부를 어떻게 알 수 있습니까? 사용자가 승인 된 경우 Authorize
을 알리려면 세션 객체를 제공해야합니까?
MVC에서 [Authorize]
속성을 사용하기 위해 읽은 적이 있습니다. 작업을 수행하거나 보안하려는 컨트롤러 클래스 위에 배치하면됩니다.MVC3에서 권한 부여 방법을 사용하는 방법
내 질문은 : Authorize
사용자가 로그인했는지 여부를 어떻게 알 수 있습니까? 사용자가 승인 된 경우 Authorize
을 알리려면 세션 객체를 제공해야합니까?
이 특성은 HttpContext.User.Identity.IsAuthenticated
을보고 작동합니다.
FormsAuthentication과 같은 것을 사용하는 경우 사용자가 컴퓨터에 유효한 FormsAuthentication 쿠키 (FormsAuthentication.SetAuthCookie
을 사용하여 추가 할 수 있음)가 있으면이 값이 true로 설정됩니다. 당신이 Authorize
의 내부 - 동작에 관심이 있다면
이 게시 된 마이크로 소프트의 소스 코드입니다 : 여기
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) {
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) {
return false;
}
return true;
}
권한 부여 클래스는 기본적으로 httpcontext를 인수로 사용합니다. 호출 될 때. 그런 다음 HttpContext.User.Identity.IsAuthenticated bool 값을 확인하고 그에 따라 작동합니다. 폼 인증을 사용하는 경우에만 작동합니다. 예를 들어 세션 객체에서 고유 한 로그인 논리를 사용하는 경우 Authorize Attribute에서 클래스를 파생시키고 호출 할 수 있습니다.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
clsSession sess = httpContext.Session["Current"] as clsSession;
if (sess.IsLogin) return true;
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new ViewResult { ViewName = "Unauthorized" };
}
}
그럼 당신은 이런 식으로이 클래스를 사용할 수 있습니다 :이 작동
[MyAuthorize]
public ActionResult Index()
{
return View();
}
. 모든 컨트롤러 동작에서 [인증] 대신 [MyAuthorize]를 사용할 수 있습니다. false를 반환하면 뷰가 반환됩니다 (이 경우 "Unauthorized"). 보기 이름은 무엇이든 가능하며보기/공유 폴더에 위치 할 수 있습니다.
고마워요. 훌륭한 자원! – Jose3d