AngularJS XSRF 접근 방식과 함께 사용할 사용자 지정 인증 필터를 작성했지만 필터가 호출되지 않았습니다.IAuthorizationFilter의 OnAuthorization 메서드가 호출되지 않습니다.
이상한 점은 다른 프로젝트에서 복사 한 것이고 거기에서 제대로 작동하는 것 같습니다.
여기는 attrubute/filter 코드입니다.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class ValidateAngularAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
string token = filterContext.RequestContext.HttpContext.Request.Headers["X-XSRF-TOKEN"];
object sessionToken = filterContext.RequestContext.HttpContext.Session["XSRF-TOKEN"];
if (string.IsNullOrEmpty(token) || sessionToken == null || sessionToken.ToString() != token)
{
throw new UnauthorizedAccessException();
}
}
}
그리고 여기에는 WebAPI 컨트롤러에서 동작이 꾸미고 있습니다.
[Authorize]
public class WorksOrdersController : ApiController
{
[HttpPost]
[ValidateAngularAntiForgeryToken]
public void EmailJob(int id, EmailModel model)
{
// do something
}
}
Web.config를 작동 시키려면 뭔가를 추가해야합니까? 실제로 작동하는 프로젝트의 web.config에서 전혀 다른 것을 볼 수 없습니다.
권한 부여 특성은 내 경험상 상속 된 클래스가 아닌'AuthorizeAttribute'에서 상속해야합니다. 또한,'OnAuthorize'가 오버라이드 할 수있는 잘못된 함수이기 때문에 HttpContextBase를 인수로 취하는'AuthorizeCore'를 오버라이드해야합니다. –
나는 그 하나의 대안을 생각하지만 나는 AuthorizeAttribute에서 세션에 액세스 할 수 없다. 그렇다고해서 다른 솔루션에서도 같은 코드가 작동하는 이유는 설명하지 않습니다. – BenCr
중요한 세부 사항이 누락되었습니다. ApiController의 작업에 있습니다. – BenCr