첫 번째 사항 먼저 : 이것은 예제 일뿐입니다. 이것이 유효한 인증 방법인지 여부는 문제가되지 않습니다.ASP.NET MVC 권한 부여 특성은 IE와 FireFox에서 다르게 동작합니다.
기본적으로 사용중인 브라우저에 따라 이상한 동작이 나타납니다. 모든 것이 파이어 폭스에서 예상대로 작동하지만, IE에서는 의심스러운 컨트롤러 동작이 인증이 실패하더라도 여전히 작동합니다.
[AuthorizeByToken]
public class SecureController : Contrller
protected override void OnAuthorization(AuthorizationContext filterContext)
{
// Check for presence of encoded session string
if (filterContext == null) throw new ArgumentNullException("filterContext null");
if (filterContext.HttpContext == null) throw new ArgumentNullException("httpContext null");
if (filterContext.HttpContext.Request["TestToken"] == null) return;
// Complete authorization
FormsAuthentication.SetAuthCookie(csmSession.CSMUser.userName, true);
base.OnAuthorization(filterContext);
}
도과 같이 AuthorizeAttribute을 기반으로 AuthorizeByTokenAttribute 속성이있다 :
나는 SecureController 클래스는 다음과 같은 관련 코드와 표준 컨트롤러 클래스에서 상속 곳에는 ASP.NET MVC 테스트 사이트가 설정 한
public class AuthorizeByTokenAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/");
filterContext.ActionDescriptor = null;
base.HandleUnauthorizedRequest(filterContext);
}
}
예를 들어 http://testsite/TestSecureController/Index을 방문하면 Firefox에서 예상대로 작동합니다. 권한 부여 코드로 들어가 실패하고 루트로 리디렉션됩니다. IE에서는 코드를 인증하고 여전히 실패하고 다음 단계는 TestSecureController의 Index() 액션 실행입니다.
누구든지 브라우저와 관련이있는 이유에 대한 통찰력을 제공 할 수 있습니까?
몇 가지 질문 : 1.이 컨트롤러의 루트 인 Index() 작업 메서드가 아닙니까? 2.이 속성으로 장식 된 SecureContoller 대신 전체 웹 사이트의 루트로 리디렉션하려고합니까? – Aaronontheweb
RedirectResult ("/")가 웹 사이트가 아닌 컨트롤러의 루트로 리디렉션되는 것이 좋습니다. 나는 그것이 그런 식으로 작동 할 것이라고 생각하지 않았을 것이거나 라우팅이 어떻게 작동하는지 깨뜨릴 것입니다. 잘못하면 나를 바로 잡으십시오. 어느 쪽이든, 분명히 이것은 브라우저의 선택에 영향을받지 않는 완전히 서버가 포함 된 동작입니까? – nathanchere
나는 두포를 열고 질문에 대답하기 전에 목표가 무엇인지 이해하려고 노력하고 있습니다. 문제는 각 브라우저가 상대적 Uris를 처리하는 방법과 각 브라우저에서 쿠키 동작이 작동하는 방법 중 하나에 있습니다. 나는 항목 # 1을 제거하거나 확인하기 위해 지금 실험을 준비 중입니다. – Aaronontheweb