Saya membaca dari beberapa sumber (buku dan jawaban SO) tentang otorisasi di WebApi.
Misalkan saya ingin menambahkan Atribut Khusus yang memungkinkan akses hanya untuk Pengguna Tertentu:
Kasus 1
Saya telah melihat pendekatan overriding ini OnAuthorization
, yang menetapkan respons jika ada yang salah
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Kasus # 2
Tetapi saya juga melihat contoh serupa ini yang juga menimpa OnAuthorization
tetapi dengan panggilan ke base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Kemudian, Anda memeriksa apakah
HttpActionContext.Response
sudah diatur atau tidak. Jika tidak disetel, itu berarti permintaan tersebut diotorisasi dan pengguna baik-baik saja
Kasus # 3
Tetapi saya juga telah melihat pendekatan pengesampingan ini IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Kasus # 4
Dan kemudian saya melihat contoh serupa tetapi dengan call base.IsAuthorized (konteks):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Satu hal lagi
Dan akhirnya Dominick berkata di sini :
Anda tidak boleh mengganti OnAuthorization - karena Anda akan kehilangan penanganan [AllowAnonymous].
Pertanyaan
1) Metode apa yang harus saya gunakan:
IsAuthorized
atauOnAuthorization
? (atau kapan harus menggunakan yang mana)2) kapan saya harus memanggil
base.IsAuthorized or
base.OnAuthorization`?3) Apakah ini cara mereka membangunnya? bahwa jika responsnya nol maka semuanya baik-baik saja? (kasus # 2)
NB
Harap perhatikan, saya menggunakan (dan ingin menggunakan) hanya AuthorizeAttribute
yang sudah mewarisi dari AuthorizationFilterAttribute
Kenapa?
Karena saya berada di tahap pertama dalam: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Pokoknya saya bertanya melalui memperluas atribut Otorisasi.