WebApi의 인증에 대한 여러 리소스 (책 및 SO 답변)에서 읽고 있습니다.
특정 사용자에게만 액세스를 허용하는 사용자 정의 속성을 추가한다고 가정합니다.
사례 # 1
나는 무언가가 잘못되면 응답을 설정하는 재정의 접근 방식을 보았습니다. OnAuthorization
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
사례 # 2
그러나 나는 또한 재정의 OnAuthorization
하지만 다음을 호출 하는 유사한 예제를 보았습니다 base
.
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
그런 다음 HttpActionContext.Response
이 설정되어 있는지 확인합니다
. 설정되지 않은 경우 요청이 승인되고 사용자가 정상임을 의미합니다.
사례 # 3
하지만 재정의하는이 접근 방식도 보았습니다 IsAuthorized
.
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
사례 # 4
그리고 비슷한 예제 1을 보았지만 base.IsAuthorized (context)를 호출했습니다.
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
하나 더
그리고 마침내 Dominick는 여기에서 말했습니다 .
OnAuthorization을 재정의하면 안됩니다. [AllowAnonymous] 처리가 누락 될 수 있기 때문입니다.
질문
1) 내가 사용해야하는 방법 :
IsAuthorized
나OnAuthorization
? (또는 사용시기)2) 언제
base.IsAuthorized or
base.OnAuthorization`을 호출 해야합니까?3) 이것이 그들이 그것을 만든 방법입니까? 응답이 null이면 모든 것이 정상입니까? (케이스 # 2)
NB
나는 AuthorizeAttribute
이미 상속받은 것만 사용하고 있습니다 (사용하고 싶습니다)AuthorizationFilterAttribute
왜 ?
나는 첫 번째 단계에 있기 때문에 : http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
어쨌든 확장 Authorize 속성을 통해 요청합니다.