Programovanie

Ako zabezpečiť webové rozhrania ASP.Net pomocou autorizačných filtrov

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ý;

        }

    }