Autorisatie via data-annotaties in .NET

Gepubliceerd op 31 oktober 2016Leestijd: 2 minuten

Sommige webapplicaties die online staan moeten alleen toegankelijk zijn voor bepaalde ingelogde gebruikers of bezoekers vanaf een reeks IP-adressen. In andere gevallen wil je dat de webapplicatie zelf beschikbaar is voor alle bezoekers, maar bepaalde methodes niet.

.NET heeft verschillende mogelijkheden om hiervoor te zorgen. Bijvoorbeeld via een validatie via code in de methode zelf of via data-annotaties. Die laatste staan hieronder beschreven.

Methoden in .NET

Een methode kan een bepaalde functie zijn die wordt aangeroepen door een bezoeker om een PDF-bestand te downloaden of bijvoorbeeld een view zoals een overzicht met alle gebruikers in de webapplicatie. In het MVC-framework van .NET zijn deze methoden Actions binnen Controllers, waarbij de methode altijd een ActionResult teruggeeft, in het geval van een view is dat View en in het geval van het downloaden van een bestand, kan dat een File zijn. Validatie via data-annotaties kan worden toegepast op zowel Controller als Action.

Data-annotaties

Data-annotaties zijn stukjes tekst die extra context of informatie geven aan de code, zonder de code zelf aan te passen. Een voorbeeld is [Required], waarmee je kan aangeven dat een eigenschap verplicht is:


  public class Klant
    {
        [Required]
        [Display(Name = "E-mail")]
        public string Email { get; set; }
    }

Rollen via data-annotaties

 

 

Via deze data-annotaties kan je er ook voor zorgen dat gebruikers ingelogd moeten zijn met een bepaalde rol voordat ze een Action mogen uitvoeren. Er zijn een aantal belangrijke data-annotaties:

 

 

  1. [Authorize]: hiermee wordt aangegeven dat een Controller of Action alleen toegankelijk is voor ingelogde gebruikers.
  2. [AllowAnonymous]: Niet-ingelogde bezoekers mogen de Action uitvoeren, zelfs als de Controller een ingelogde bezoeker verwacht.

Voorbeeld rollen via data-annotaties

  


[Authorize]
    public class WinkelController : Controller
    {

       [Authorize(Roles = "Beheerder, Administrator")]
        public ActionResult OverzichtBestellingen()
        {
            return View();
        }

        [AllowAnonymous]
        [HttpPost]
        public ActionResult Login()
        {
            /* Logincode */
            return View();
        }

 

In bovenstaande voorbeeld staat ook een methode om via Roles= aan te geven welke rollen (één van de) verplicht zijn.

IP-filter via data-annotatie

Sommige functionaliteit in een Controller wil je alleen beschikbaar hebben voor gebruikers vanaf een bepaald IP-adres. Door data-annotaties uit te breiden met een nieuwe annotatie, kan je dit bewerkstelligen. Deze uitbreiding is al gemaakt: Restrict Access to an MVC Action or Controller by IP Address using a Custom Action Filter.

Voeg bovenstaande ActionFilterAttribute aan je project toe en plaats in je app.config of web.config de toegestane IP-adressen: <add value="::1, 127.0.0.1, 10.0.*.*, 79.88.44.33" key="AuthorizeIPAddresses" />.

Nu kan je via de data-annotatie [AuthorizeIPAddress] elke Controller en Action naar wens alleen toegankelijk maken vanaf een of een aantal bepaalde IP-adressen.