WebApi'de yetkilendirme hakkında çeşitli kaynaklardan (kitaplar ve SO cevapları) okuyorum.
Yalnızca Belirli Kullanıcılar için erişime izin veren Özel Öznitelik eklemek istediğimi varsayalım:
Dava 1
Bir şeylerin yanlış olması durumunda tepkiyi belirleyen bu geçersiz kılma yaklaşımını gördüm OnAuthorization
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Örnek 2
Ama aynı zamanda geçersiz kılan, OnAuthorization
ancak şu çağrıyı yapan bu benzer örneği de gördüm base
:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Ardından, HttpActionContext.Response
ayarlı olup olmadığını kontrol edersiniz
. Ayarlanmamışsa, isteğin yetkili olduğu ve kullanıcının uygun olduğu anlamına gelir
Vaka 3
Ama aynı zamanda geçersiz kılma yaklaşımını da gördüm IsAuthorized
:
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
if ( /*check if user OK or not*/)
{
return true;// or false
}
}
}
Vaka # 4
Ve sonra benzer bir örnek gördüm ama base.IsAuthorized (bağlam):
protected override bool IsAuthorized(HttpActionContext context)
{
if (something1 && something2 && base.IsAuthorized(context)) //??
return true;
return false;
}
Bir şey daha
Ve sonunda Dominick burada şöyle dedi :
OnAuthorization'ı geçersiz kılmamalısınız çünkü [AllowAnonymous] işlemesi eksik olacaktır.
Sorular
1) Hangi yöntemleri kullanmalıyım:
IsAuthorized
veyaOnAuthorization
? (veya ne zaman kullanılmalı)2)
base.IsAuthorized or
base.OnAuthorization'ı ne zaman aramalıyım?3) Böyle mi inşa ettiler? Eğer yanıt boşsa her şey yolunda mı? (vaka # 2)
NB
Lütfen dikkat edin, yalnızca AuthorizeAttribute
zaten devralan kullanıyorum (ve kullanmak istiyorum)AuthorizationFilterAttribute
Neden ?
Çünkü şu konuda ilk aşamadayım: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Her neyse, Yetkilendir özelliğini genişleterek soruyorum.