문제

웹 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/

이렇게 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top