누구든지 관심이있을 수 있습니다. 나는 마침내 이것이 (어리석게도) 내 자신의 클래스 이름을 속성으로 사용하는 것처럼 간단하다는 것을 깨달았다.
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가 생각한 바를 이해할 수 없습니다. 로그인 페이지로 되돌아 오는 이유와 사용자가 다른 자격 증명을 시도 할 수 없음을 알리는 것에 대한 피드백은 없습니다 (자격 증명이 다른 경우조차도 거의 없을 것입니다).