Zabezpečení je hlavním problémem webových podnikových aplikací. Pokud potřebujete přenášet data po drátu, měli byste si být vědomi různých nástrojů, které můžete použít k zabezpečení těchto dat.
ASP.Net Web API je odlehčený rámec používaný pro vytváření bezstavových služeb RESTful, které běží na HTTP. Jedním ze způsobů, jak zabezpečit služby webového API, jsou autorizační filtry.
V ideálním případě byste měli provést ověřování a autorizaci na začátku kanálu webového rozhraní API. To pomáhá eliminovat zbytečné režie zpracování z cyklu požadavků. Všimněte si, že ať už pro ověření používáte moduly HTTP nebo obslužné rutiny zpráv HTTP, můžete načíst aktuálního instančního objektu (tj. Uživatele) z ApiController.User
vlastnictví.
Mějte také na paměti, že autorizační filtry webového rozhraní API se provádějí před metodami akce řadiče. Pokud tedy příchozí požadavek není autorizován, bude ze služby vrácena chyba, požadavek bude ignorován a akční metoda služby nebude provedena.
Pomocí autorizačního filtru AuthorizeAttribute
Integrovaný autorizační filtr AuthorizeAttribute
lze použít k autorizaci příchozích požadavků. Můžeš použítAuthorizeAttribute
zkontrolovat, zda je uživatel ověřen. Pokud uživatel není ověřen, vrátí stavový kód HTTP 401. Toto povolení lze použít ve webovém rozhraní API globálně nebo na úrovni řadiče.
Všimněte si, že můžete také implementovat vlastní obslužnou rutinu zpráv, která autorizuje přístup k vašim metodám řadiče, protože filtry zpráv se spouštějí mnohem dříve v životním cyklu webového rozhraní API.
Chcete-li omezit přístup ke všem řadičům, můžete přidat AuthorizeAttribute
globálně do Filtry
sbírka HttpConfiguration
instance. Následující fragment kódu ukazuje, jak můžete přidat AuthorizeAttribute
do Filtry
sbírka HttpConfiguration
objekt.
public static void Register (HttpConfiguration config)
{
// Konfigurace a služby webového API
// Trasy webového API
config.MapHttpAttributeRoutes ();
config.Routes.MapHttpRoute (
název: „DefaultApi“,
routeTemplate: “api / {controller} / {id}”,
výchozí: nový {id = RouteParameter.Optional}
);
config.Filters.Add (nový AuthorizeAttribute ());
}
Pomocí atributu Autorizovat
Na úrovni správce můžete omezit přístup použitím Povolit
atribut, jak je znázorněno v níže uvedeném fragmentu kódu.
[Povolit]
public class EmployeesController: ApiController
{
// Sem napište metody, které odpovídají Httpovým slovesům
}
Můžete také použít Povolit
atribut na úrovni akce omezit přístup k určité metodě akce. Následující fragment kódu ukazuje, jak to lze implementovat.
public class EmployeesController: ApiController
{
public HttpResponseMessage Get () {// Nějaký kód}
// Vyžadovat autorizaci pro konkrétní akci.
[Povolit]
public HttpResponseMessage Post (emp emp) {// Nějaký kód}
}
Ve fragmentu kódu zobrazeném dříve přístup k Pošta()
metoda je omezena, zatímco přístup k Dostat()
metoda není omezena. Můžete také omezit správce a poté poskytnout anonymní přístup k jedné nebo více metodám akce. Následující fragment kódu to ilustruje.
public class EmployeesController: ApiController
{
public HttpResponseMessage Get () {// Nějaký kód}
[AllowAnonymous]
public HttpResponseMessage Post (emp emp) {// Nějaký kód}
}
Autorizujte akce podle rolí a uživatelů
Je také možné omezit přístup k metodám akcí rolemi a uživateli. Následující fragment kódu ukazuje, jak toho lze dosáhnout.
[Autorizovat (Uživatelé = "Joydip, Jini")] // Omezit přístup podle uživatele
public class EmployeesController: ApiController
{
// Sem napište metody, které odpovídají Httpovým slovesům
}
Ve výše uvedeném příkladu řadič Zaměstnanci omezuje přístup pouze na uživatele Joydip a Jini. Níže uvedený kód ukazuje, jak můžete omezit přístup podle rolí.
[Autorizovat (role = "administrátoři")] // Omezeno podle rolí
public class EmployeesController: ApiController
{
// Sem napište metody, které odpovídají Httpovým slovesům
}
Vždy máte přístup k ApiController.User
vlastnost uvnitř metody řadiče k načtení aktuálního principu a udělení autorizace na základě role uživatele. To se zobrazuje v seznamu kódů níže.
veřejné HttpResponseMessage Get ()
{
if (User.IsInRole („Správci“))
{
// Sem napište kód
}
}
Používání vlastních autorizačních filtrů v ASP.Net Web API
Autorizační filtr je třída, která rozšiřuje AuthorizationFilterAttribute
třídy a přepíše OnAuthorization ()
metoda. Toto je metoda, kde můžete napsat autorizační logiku. Pokud autorizace selže, můžete vrátit instanci Neoprávněná výjimka
třída nebo dokonce zvyk HttpResponseMessage
.
Následující výpis kódu ukazuje, jak můžete implementovat vlastní třídu pro autorizaci požadavků na vaše webové API. Měli byste rozšířit AuthorizeAttribute
třídy k implementaci vlastní třídy autorizačního filtru.
veřejná třída CustomAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (AuthorizeRequest (actionContext))
{
vrátit se;
}
HandleUnauthorizedRequest (actionContext);
}
protected override void HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)
{
// Kód pro zpracování neoprávněného požadavku
}
private bool AuthorizeRequest (System.Web.Http.Controllers.HttpActionContext actionContext)
{
// Sem zadejte svůj kód k provedení autorizace
návrat true;
}
}