Asp.net WebApi 커스텀 인증 - 엉망진창?
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
설정 여부입니다.있지 않은 는, , 는 OK, OK, OK가 되어 있는 것을 합니다.
케이스 #3
저는 이런 본 .IsAuthorized
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
케이스 #4
그리고 비슷한 예를 하나 봤지만 호출기지를 사용했어요.Is Authorized(콘텍스트):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
한가지 더요.
그리고 마지막으로 도미닉은 이렇게 말했다.
[AllowAnonymous] 처리가 누락될 수 있으므로 OnAuthorization을 재정의하면 안 됩니다.
문의사항
사용해야 ? 1) 어떤 방법을 사용해야 합니까?
IsAuthorized
★★★★★★★★★★★★★★★★★」OnAuthorization
( 어떤 에 사용합니까 (「」의 「」의 「」입니다.연락하면 요?
base.IsAuthorized or
base.온인증?3) 이렇게 구축했습니까?응답이 null이면 모든 것이 정상입니다.(케이스 #2)
NB
만 사용하고 .AuthorizeAttribute
「」로부터 되고 있습니다.AuthorizationFilterAttribute
왜요?
http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api의 첫 번째 단계이기 때문입니다.
어쨌든 저는 Authorize Atribute를 확장하여 요구합니다.
IsAuthorized 또는 OnAuthorization 중 어떤 방식을 사용해야 합니까? (또는 언제 사용할지)
AuthorizationFilterAttribute
인증 로직이 확립된 ID 및 역할에 의존하지 않는 경우.허가에 는 ""를 합니다.AuthorizeAttribute
전자의 경우는, 우선합니다.OnAuthorization
엔 '아까', '아까보다'를 IsAuthorized
어트리뷰트의 알수 「 」는 「 」입니다.OnAuthorization
는, 「가상」이라고 하는 가 붙어, 「가상」이라고 마크가 붙어, 「가상」이라고 하는 것은, 「」이라고 하는 마크가 붙어 있는 입니다.AuthorizationFilterAttribute
면,는IsAuthorized
는 method에서 됩니다.AuthorizeAttribute
이것은 사용 목적에 대한 좋은 포인터라고 생각합니다.
언제 기지에 연락하면 될까요?Is Authorized 또는 base.온인증?
이 질문에 대한 답은 OO의 일반적인 작동 방식에 있습니다.메서드를 덮어쓰면 새로운 구현을 완전히 제공하거나 부모로부터 제공된 구현을 기반으로 동작을 강화할 수 있습니다. 「」의 는, 「」입니다.IsAuthorized(HttpActionContext)
기본 클래스 동작은 필터에 지정된 내용과 설정된 ID를 비교하여 사용자/롤을 체크하는 것입니다.예를 들어, 이 모든 것을 하고 싶지만, 다른 것을 체크하고 싶은 경우는, 요청 헤더나 다른 것에 근거하고 있는 경우가 있습니다.이 경우 다음과 같은 오버라이드를 제공할 수 있습니다.
protected override bool IsAuthorized(HttpActionContext actionContext)
{
bool isAuthroized = base.IsAuthorized(actionContext);
// Here you look at the header and do your additional stuff based on actionContext
// and store the result in isRequestHeaderOk
// Then, you can combine the results
// return isAuthorized && isRequestHeaderOk;
}
죄송합니다만, 당신의 Q3을 이해할 수 없습니다.BTW, 인증 필터는 오랫동안 사용되어 왔고, 사람들은 그것을 모든 것에 사용하기도 하고, 때로는 잘못 사용하기도 합니다.
한가지 더요.그리고 마지막으로 여기 어떤 사람이 말하길: OnAuthorization을 덮어쓰면 안 된다. 왜냐하면 당신은 [AllowAnonymous] 처리를 놓치기 때문이다.
할 것입니다.이치노「 」의,OnAuthorization
), (아래 참조),
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext == null)
{
throw Error.ArgumentNull("actionContext");
}
if (SkipAuthorization(actionContext))
{
return;
}
if (!IsAuthorized(actionContext))
{
HandleUnauthorizedRequest(actionContext);
}
}
의 콜.SkipAuthorization
는, 「」를 입니다.AllowAnonymous
필터가 적용됩니다.즉, 인가는 생략됩니다.이 메서드를 덮어쓰면 동작이 느려집니다., 그에서 사용자/롤을 되었을 수 .AuthorizeAttribute
이 시점에서 올바른 옵션은 덮어쓰기뿐입니다.IsAuthorized
""가 ""입니다.OnAuthorization
쪽이든
PS. ASP에서NET Web API에는 인증 필터라고 불리는 다른 필터가 있습니다.이름에서 알 수 있듯이 인증 및 인가 필터에 사용합니다.그러나 이 경계가 모호해진 예는 많다.많은 인증 필터의 예에서는, 어떠한 종류의 인증을 실시합니다.어쨌든 시간이 되셔서 좀 더 자세히 알고 싶으시면 이 MSDN 기사를 보시기사를 봐주세요.면책사항:제가 쓴 거예요.
좋아요, 제 제안은 당신이 당신의 웹 API를 보호하기 위해 OAuth 베어러 토큰을 사용하고 있고 당신이 허용된 것을 설정하고 있다고 가정한다면 다음과 같이 하는 것입니다.토큰을 발행했을 때의 사용자에 대한 클레임으로서의 시간.토큰 기반 인증에 대한 자세한 내용은 여기를 참조하십시오.
- 커스텀 작성AuthorizationFilterAttribute에서 파생된 AuthorizationAttribute
메서드 '''
OnAuthorizationAsync
하다public class CustomAuthorizeAttribute : AuthorizationFilterAttribute { public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken) { var principal = actionContext.RequestContext.Principal as ClaimsPrincipal; if (!principal.Identity.IsAuthenticated) { return Task.FromResult<object>(null); } var userName = principal.FindFirst(ClaimTypes.Name).Value; var userAllowedTime = principal.FindFirst("userAllowedTime").Value; if (currentTime != userAllowedTime) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized, "Not allowed to access...bla bla"); return Task.FromResult<object>(null); } //User is Authorized, complete execution return Task.FromResult<object>(null); } }
- 이제 컨트롤러에서 커스텀을 사용할 수 있습니다.이 인가 로직을 사용하여 컨트롤러를 보호하기 위한 authorize Atribute를 지정합니다.
ASP.NET v5는 완전히 새로운 인가 시스템을 도입했습니다.를 사용하는 사용자용.NET 5 마이크로소프트로의 이행을 제안합니다.AspNet.Authorization.
다 있기 것을 마무리합니다.System.Web.Http.Authorize
★★★★★★★★★★★★★★★★★」System.Web.Mvc.Authorize
및 기타 오래된 인증 실장.
작업 유형(작성, 읽기, 업데이트, 삭제), 리소스, 역할, 클레임, 보기, 사용자 지정 요구 사항을 매우 적절하게 추상화하여 위의 항목 중 하나를 조합하여 사용자 지정 핸들러를 구축할 수 있습니다.또한 이러한 핸들러를 조합하여 사용할 수도 있습니다.
ASP.NET v5에서 인증은 단순한 선언적 역할과 보다 풍부한 정책 기반 모델을 제공합니다.이 모델에서는 인가를 요건으로 표현하고 핸들러는 사용자의 요구를 요건에 대해 평가합니다.필수 체크는 사용자가 액세스하려는 리소스의 사용자 ID와 속성을 모두 평가하는 간단한 정책 또는 정책을 기반으로 할 수 있습니다.
언급URL : https://stackoverflow.com/questions/26464848/custom-authorization-in-asp-net-webapi-what-a-mess
'programing' 카테고리의 다른 글
Bat 파일을 사용하여 Windows를 셧다운, 재시작 또는 로그오프하려면 어떻게 해야 합니까? (0) | 2023.04.21 |
---|---|
메시지를 다시 시도하기 전에 Azure 서비스 버스를 지연시킬 수 있습니까? (0) | 2023.04.21 |
내 구독의 파란색 저장소 계정에 사용된 공간 확인 (0) | 2023.04.21 |
ImportError: win32com.client라는 이름의 모듈이 없습니다. (0) | 2023.04.21 |
DLL 파일이란 정확히 무엇이며 어떻게 작동합니까? (0) | 2023.04.21 |