2014-05-16 1 views
2

leastprivilege에서 설명한 것처럼 Thinktecture.IdentityModel을 사용하여 클레임 인증 확인을 설정하는 두 가지 방법이 있습니다. 하나는 필터를 설정하는 것입니다. 다른 하나는 점검하려는 조치에 속성을 추가하는 것입니다.Thinktecture.IdentityModel을 사용한 클레임 인증

속성 옵션을 사용하고 있습니다. 그러나 로그인 페이지에 승인되지 않은 (인증 된) 요청을 보내는 동작을 무시하고 싶습니다.

대신 단순히 401 오류 (또는 인증되지 않은 페이지)를 제시하고 싶습니다. 지금까지 HandleUnauthorizedRequest를 재정의하고 인증 된 경우 401 오류를 throw하는 다음 클래스가 있습니다. 그러나, 나는 그것을 연결하는 방법을 알아 낸 유일한 방법은이 클래스를 필터로 추가하는 것입니다. 그렇게함으로써, 그것은 속성 장식을 사용하지 않고 CheckAcess 메소드로 액션/리소스를 보냅니다. 이것은 우리에게 쓸모가 없습니다.

답변

2

누구든지 관심이있을 수 있습니다. 나는 마침내 이것이 (어리석게도) 내 자신의 클래스 이름을 속성으로 사용하는 것처럼 간단하다는 것을 깨달았다.

CustomClaimsAuthorizeAttribute("myParameter") 
public ActionResult Index() 
{ 
    ... 
} 

또한, 나는 발견 심지어 사용자에게 지정 401 오류 페이지를 제공하지 않습니다 UnauthorizedAccessException을 던지고, 내 web.config 파일에 다음과. 대신 일반 오류 페이지가 표시됩니다.

<customErrors mode="On" defaultRedirect="ErrorPage.aspx"> 
    <error statusCode="401" redirect="ErrorNoAccess.aspx" /> 
</customErrors> 

이 예외가 생성됩니다.

"ASP.NET이 요청 된 리소스에 액세스 할 수있는 권한이되지 않는 ASP.NET 요청 ID 리소스에 대한 액세스 권한을 부여 을 고려 ASP.NET을. 응용 프로그램이 가장하지 않는 경우 사용되는 기본 프로세스 ID (IIS5의 경우 {MACHINE} \ ASPNET 또는 IIS 6 및 IIS 7의 경우 네트워크 서비스이고 IIS7의 경우 구성된 응용 프로그램 풀 ID 인 )이 있습니다. 응용 프로그램은 임 퍼스입니다. onating via을 통해 익명 사용자 (일반적으로 IUSR_MACHINENAME) 또는 인증 된 요청 사용자가 이됩니다. "

나는 대신 403 (금지됨) 오류를 발생시키기로 결정했습니다. 그래서 내 재정은 다음과 같이보고 결국 :로 지정

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 

    if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     throw new HttpException((int)HttpStatusCode.Forbidden, "Unauthorized access"); 

    base.HandleUnauthorizedRequest(filterContext); 
} 

그리고 내 Web.config의 오류 페이지 : 지금있는 권한을 가진 사용자로 로그인 할 수 있으며 ErrorNoAccess 제시

<customErrors mode="On" defaultRedirect="ErrorPage.aspx"> 
    <error statusCode="403" redirect="ErrorNoAccess.aspx" /> 
    <error statusCode="404" redirect="ErrorNotFound.aspx" /> 
    <error statusCode="500" redirect="ErrorPage.aspx" /> 
</customErrors> 

합니다. 로그인 페이지에 던져지는 대신 aspx 페이지 (실제로 '루프백'으로 체크 한 경우)이 표시됩니다.

유효하게 인증되었지만 승인되지 않은 요청으로 인해 로그인 페이지에 사용자를 던져서 MS가 생각한 바를 이해할 수 없습니다. 로그인 페이지로 되돌아 오는 이유와 사용자가 다른 자격 증명을 시도 할 수 없음을 알리는 것에 대한 피드백은 없습니다 (자격 증명이 다른 경우조차도 거의 없을 것입니다).