MVC 컨트롤러에서 한 작업에 대한 인증을 비활성화 할 수 있습니까?
컨트롤러에 권한 부여 속성이 있지만 한 가지 작업에 대해 해제하고 싶습니다. 나만의 인증 필터를 만들고 역할 목록에 "익명"을 추가했습니다. 내 필터에서 익명이 역할 목록에 나타나면 true를 반환합니다.
그러나 컨트롤러 인증이 다른 것을 선점하는 것처럼 로그인 페이지를 통과하지 못하는 것 같습니다.
당신은 추가 할 수 있습니다 [Authorize]
컨트롤러 클래스에 다음 추가 [AllowAnonymous]
당신이 권한을 부여하지 않으려는 하나의 행동. 예:
[Authorize]
public class AccountController : Controller
{
public ActionResult Profile()
{
return View();
}
[AllowAnonymous]
public ActionResult Login()
{
return View();
}
}
고유 한 버전의 속성을 만들 수 있습니다.
매우 유사한 질문이 있으며이 상황을 처리하는 자신의 속성을 구현하는 방법에 대한 꽤 좋은 대답이 있습니다.
Btw. 기본적으로 권한이있는 컨트롤러를 만들 수도 있습니다.
베이스
[Authorize]
public abstract class SecureControllerBase : Controller
{
}
용법
public class MyController : SecureControllerBase
{
}
방금 Azure ACS를 페더레이션 ID 공급자로 사용하는 솔루션을 수행했지만 수락 된 답변이 저에게 적합하지 않았습니다. 어려움을 겪는 사람들을 위해 내 솔루션은 필요한 컨트롤러 /보기에 대해 보안을 모두 우회하는 것이 었습니다.
인증을 우회해야하는 작업에 대한 새 컨트롤러 /보기를 만듭니다.
그리고 web.config에서 다음을 추가하십시오.
<location path="TheNameOfTheControllerYouWantToBypass">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
컨트롤러 클래스가 아니라 필터링하려는 작업에 속성을 추가하기 만하면됩니다. 동작을 꾸미지 않음으로써, 컨트롤러 또는 기본 컨트롤러 중 하나에 속성이 없으면 필터링되지 않습니다.
예를 들어 필요하지 않은 작업 메서드에 AuthorizationAttribute를 추가하지 마십시오.
내 맞춤 속성
public class AuthorizationFilterAttribute : AuthorizeAttribute
{
// Some code...
}
내 컨트롤러
public class UserController : BaseController, IDisposable
{
[AuthorizationFilterAttribute]
public ActionResult UserList()
{
// Authorize attribute will call when this action is executed
}
public ActionResult AddUser()
{
// Authorize attribute will not call when this action is executed
}
}
I hope you got my point what I am trying to say you.
============================ Updated Answer ================================
Create one more attribute like below.
public sealed class AnonymousAttribute : Attribute { }
Please put below code on your OnAuthorization method.
public override void OnAuthorization(AuthorizationContext filterContext)
{
bool checkForAuthorization =
filterContext.ActionDescriptor.IsDefined(typeof(AnonymousAttribute), true) ||
filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AnonymousAttribute), true);
if (!skipAuthorization)
{
base.OnAuthorization(filterContext);
}
}
ReferenceURL : https://stackoverflow.com/questions/9581270/is-it-possible-to-disable-authorization-on-one-action-in-an-mvc-controller
'programing tip' 카테고리의 다른 글
변수의 독 스트링 (0) | 2021.01.07 |
---|---|
val ()은 어떻게 Number를 반환 할 수 있습니까? (0) | 2021.01.07 |
레일에 CSS 클래스 추가 link_to helper (0) | 2021.01.07 |
ImageMagick을 사용하여 애니메이션 GIF를 자르려면 어떻게합니까? (0) | 2021.01.07 |
모든 라디오 버튼을 탭할 수 있습니까? (0) | 2021.01.07 |