Tôi đang đọc từ một số tài nguyên (sách và câu trả lời SO) về ủy quyền trong WebApi.
Giả sử tôi muốn thêm Thuộc tính tùy chỉnh chỉ cho phép truy cập cho Người dùng nhất định:
Trường hợp 1
Tôi đã thấy cách tiếp cận ghi đè này OnAuthorization
, đặt phản hồi nếu có gì đó không ổn
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Trường hợp số 2
Nhưng tôi cũng đã thấy ví dụ tương tự này, nó cũng ghi đè OnAuthorization
nhưng với việc gọi tới base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Sau đó, bạn kiểm tra xem đã
HttpActionContext.Response
được thiết lập hay chưa. Nếu nó không được đặt, điều đó có nghĩa là yêu cầu đã được ủy quyền và người dùng đồng ý
Trường hợp số 3
Nhưng tôi cũng đã thấy cách tiếp cận ghi đè này IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Trường hợp số 4
Và sau đó tôi thấy một ví dụ tương tự nhưng với việc gọi base.IsAuthorized (context):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Một điều nữa
Và cuối cùng Dominick đã nói ở đây :
Bạn không nên ghi đè OnAuthorization - vì bạn sẽ thiếu khả năng xử lý [AllowAnonymous].
Câu hỏi
1) Tôi nên sử dụng những phương pháp nào:
IsAuthorized
hoặcOnAuthorization
? (hoặc khi nào thì dùng cái nào)2) Khi nào tôi nên gọi
base.IsAuthorized or
base.OnAuthorization`?3) Đây có phải là cách họ xây dựng nó? rằng nếu phản hồi là null thì mọi thứ vẫn ổn chứ? (trường hợp số 2)
NB
Xin lưu ý, tôi đang sử dụng (và muốn sử dụng) chỉ AuthorizeAttribute
mà đã kế thừa từ AuthorizationFilterAttribute
Tại sao ?
Trở thành tôi đang ở giai đoạn đầu tiên trong: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Dù sao thì tôi cũng đang hỏi thông qua thuộc tính Authorize mở rộng.