ASP.NET 웹 API에 대한 사용자 지정 MVC AuthorizeAttribute
-
13-11-2019 - |
문제
웹 API 컨트롤러에 사용자 정의 인증 속성을 구현하려고 하는데 예상치 못한 동작이 발생했습니다.
<Authorize(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
위의 코드는 매우 잘 작동합니다.그것은 허용할 것이다 "내 사용자" 항목을 검색하려면 봇 외에는 누구도 액세스할 수 없습니다.그러나 사용자 정의 인증으로 동일한 접근 방식을 시도하면 전체 확인을 건너뛰고 모든 사용자가 리소스에 액세스할 수 있습니다.둘 다 AuthorizeCore
도 아니고 OnAuthorization
내 파생 클래스의 재정의된 메서드가 호출됩니다.
<MyAuth(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
파생 클래스는 다음에서 상속됩니다. System.Web.Mvc.AuthorizeAttribute
, 프로젝트는 다음과 같이 IIS에 배포됩니다. Windows 인증 & 가장이 활성화되었습니다., 그리고 익명 인증 장애가 있는.
MVC 컨트롤러에 동일한 사용자 정의 인증을 추가하면 작동합니다.그러나 API 컨트롤러에는 아무것도 없습니다.만약 Authorize
속성도 작동하지 않았을 것이고 더 의미가 있었을 것입니다.뭔가 빠졌나요?이는 예상된 동작입니까, 아니면 베타의 버그입니까?
해결책
당신은 사용해야합니다 System.Web.Http.AuthorizeAttribute
대신 웹 API용 System.Web.Http.dll에서 System.Web.Mvc.AuthorizeAttribute
.
즉, 왜냐하면 namespace System.Web.Http.AuthorizeAttribute
에서 파생됩니다 AuthorizationFilterAttribute
.필터는 Web API에 의해 자동으로 처리됩니다.내 구현에서는 다음에서 직접 파생되었습니다. AuthorizationFilterAttribute
기본 HTTP 인증을 처리합니다.
다른 팁
기본적인 권한 부여를 위해 내 사용자 정의 구현을 만들었습니다.
http.: //remy.supertext.ch/2012/04/basic-http-authorization-web-api-in-mvc-4-beta/
이렇게 도움이 될 수 있습니다.