Zabezpečenie je hlavným záujmom webových podnikových aplikácií. Ak potrebujete prenášať údaje po kábli, mali by ste poznať rôzne nástroje, ktoré môžete použiť na zabezpečenie týchto údajov.
ASP.Net Web API je ľahký rámec používaný na vytváranie bezstavových služieb RESTful, ktoré bežia na protokole HTTP. Jedným zo spôsobov zabezpečenia služieb Web API sú autorizačné filtre.
V ideálnom prípade by ste mali vykonať autentifikáciu a autorizáciu na začiatku potrubia webového API. To pomáha eliminovať zbytočné réžie spracovania z cyklu požiadaviek. Upozorňujeme, že či už na autentifikáciu používate moduly HTTP alebo obslužné rutiny správ HTTP, môžete aktuálneho principála (t. J. Používateľa) načítať z ApiController.User
nehnuteľnosť.
Nezabudnite tiež, že autorizačné filtre webového rozhrania API sa vykonávajú pred metódami akcie radiča. Ak teda prichádzajúca požiadavka nie je autorizovaná, zo služby sa vráti chyba, požiadavka sa bude ignorovať a spôsob akcie služby sa nevykoná.
Používanie autorizačného filtra AuthorizeAttribute
Zabudovaný autorizačný filter AuthorizeAttribute
možno použiť na autorizáciu prichádzajúcich požiadaviek. Môžeš použiťAuthorizeAttribute
skontrolovať, či je užívateľ autentifikovaný. Ak užívateľ nie je autentifikovaný, vráti stavový kód HTTP 401. Túto autorizáciu je možné uplatniť vo webovom rozhraní API globálne alebo na úrovni radiča.
Upozorňujeme, že môžete implementovať aj vlastný obslužný program správ, ktorý autorizuje prístup k vašim metódam radiča, pretože filtre správ sa vykonávajú oveľa skôr v životnom cykle webového rozhrania API.
Ak chcete obmedziť prístup ku všetkým radičom, môžete pridať AuthorizeAttribute
globálne do Filtre
zbierka HttpConfiguration
inštancia. Nasledujúci úryvok kódu ukazuje, ako môžete pridať AuthorizeAttribute
do Filtre
zbierka HttpConfiguration
objekt.
verejný statický neplatný register (konfigurácia HttpConfiguration)
{
// Konfigurácia a služby webového API
// trasy webového API
config.MapHttpAttributeRoutes ();
config.Routes.MapHttpRoute (
názov: „DefaultApi“,
routeTemplate: “api / {controller} / {id}”,
predvolené hodnoty: new {id = RouteParameter.Optional}
);
config.Filters.Add (nový AuthorizeAttribute ());
}
Pomocou atribútu Autorizovať
Na úrovni ovládača môžete prístup obmedziť použitím znaku Povoliť
ako je uvedené v útržku kódu uvedenom ďalej.
[Povoliť]
verejná trieda EmployeesController: ApiController
{
// Sem napíšeme metódy, ktoré zodpovedajú Httpovým slovesám
}
Môžete tiež použiť Povoliť
atribút na úrovni akcie obmedziť prístup k konkrétnej metóde akcie. Nasledujúci úryvok kódu ilustruje, ako je to možné implementovať.
verejná trieda EmployeesController: ApiController
{
public HttpResponseMessage Get () {// Niektorý kód}
// Vyžadovať autorizáciu pre konkrétnu akciu.
[Povoliť]
public HttpResponseMessage Post (Employ emp) {// Niektorý kód}
}
V útržku kódu zobrazenom skôr prístup k Príspevok ()
metóda je obmedzená, zatiaľ čo prístup k Získať ()
metóda nie je obmedzená. Môžete tiež obmedziť kontrolóra a potom poskytnúť anonymný prístup k jednej alebo viacerým metódam akcie. Nasledujúci úryvok kódu to ilustruje.
verejná trieda EmployeesController: ApiController
{
public HttpResponseMessage Get () {// Niektorý kód}
[AllowAnonymous]
public HttpResponseMessage Post (Employ emp) {// Niektorý kód}
}
Autorizujte akcie podľa rolí a používateľov
Je tiež možné obmedziť prístup k metódam akcie podľa rolí a používateľov. Nasledujúci úryvok kódu ukazuje, ako je to možné dosiahnuť.
[Autorizovať (Používatelia = "Joydip, Jini")]] // Obmedziť prístup podľa používateľa
verejná trieda EmployeesController: ApiController
{
// Sem napíšeme metódy, ktoré zodpovedajú Httpovým slovesám
}
Vo vyššie uvedenom príklade kontrolór Zamestnanci obmedzuje prístup iba na používateľov Joydip a Jini. Nasledujúci kód ukazuje, ako môžete obmedziť prístup podľa rolí.
[Autorizovať (úlohy = "správcovia")] // Obmedzené podľa rolí
verejná trieda EmployeesController: ApiController
{
// Sem napíšeme metódy, ktoré zodpovedajú Httpovým slovesám
}
Kedykoľvek máte prístup ApiController.User
vlastnosť v metóde radiča na získanie aktuálneho princípu a udelenie autorizácie na základe roly používateľa. Toto je zobrazené v zozname kódov nižšie.
verejná HttpResponseMessage Get ()
{
if (User.IsInRole („správcovia“))
{
// Sem napíš svoj kód
}
}
Používanie vlastných autorizačných filtrov v ASP.Net Web API
Autorizačný filter je trieda, ktorá rozširuje AuthorizationFilterAttribute
triedy a má prednosť pred OnAuthorization ()
metóda. Týmto spôsobom môžete napísať autorizačnú logiku. Ak autorizácia zlyhá, môžete vrátiť inštanciu súboru Neoprávnená výnimka
trieda alebo dokonca zvyk HttpResponseMessage
.
Nasledujúci zoznam kódov ukazuje, ako môžete implementovať vlastnú triedu na autorizáciu požiadaviek pre vaše webové API. Pamätajte, že by ste mali predĺžiť AuthorizeAttribute
triedy na implementáciu vlastnej triedy autorizačného filtra.
verejná trieda CustomAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization (System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (AuthorizeRequest (actionContext))
{
návrat;
}
HandleUnauthorizedRequest (actionContext);
}
protected override void HandleUnauthorizedRequest (System.Web.Http.Controllers.HttpActionContext actionContext)
{
// Kód na vybavenie neoprávnenej žiadosti
}
private bool AuthorizeRequest (System.Web.Http.Controllers.HttpActionContext actionContext)
{
// Sem zadajte svoj kód na vykonanie autorizácie
návrat pravdivý;
}
}