ASP.Net veebisaidi ligipääsupiirangud

From EIK wiki

Järgnev jutt on jällegi pärit "Andmebaasipõhiste veebirakenduste arendamine Microsoft Visual Studio 2008 ja SQL Server 2008 baasil" õppematerjalist (lk 405-406) Alustuseks tuleks konfiguratsioonifailis öelda, et me soovime kasutajaid autentida ning autentimata kasutajad sisse ei saa. Selleks lisame system.web elemendi alla kaks uut elementi:

  • authentication – ütleb, kuidas plaanime kasutajaid tuvastada
  • authorization – ütleb, kes saab sisse

Autentimiseks kasutame vormipõhist autentimist, mis võimaldab meil kirjutada oma metoodika kasutajate autentimiseks:

<authentication mode="Forms">
	<forms name="Projekt" loginUrl="~/logon.aspx" />
</authentication>

Järgmiseks tuleb anda ligipääs kõigile kasutajatele/kasutajagruppidele keda soovite oma veebile ligi lasta ning keelata ära ligipääs ülejäänutele. Ligipääsu andmiseks või keelamiseks tuleb autorization elemendi sisse lisada allow ja deny alamelemendid vastavalt ligipääsu andmiseks ja keelamiseks. Kasutajale ligipääsu andmiseks või keelamiseks tuleb lisada allow elemendi sisse atribuut users. Näiteks:

<allow users="mati"/>

Annab ligipääsu kasutajale mati. Lisaks sellele on võimalik kasutada ka kahte erimärki * (tärn) ning ? (küsimärk). Tärniga tähistatakse kõiki kasutajaid ning küsimärgiga tähistatakse anonüümseid ehk autentimata kasutajaid. Kuni te autoriseerimisreegleid ei ole kehtestanud kehtivad vaikimise määratud autoriseerimisreeglid, mis annavad ligipääsu kõigile kasutajatele:

<allow users="*"/>

Kõige lihtsamaks muudatuseks autoriseerimisreeglites oleks keelata ligipääs kõigile anonüümsetele kasutajatele lubades kõik ülejäänud (kes on oma kasutajanime ja parooli sisestanud) veebile ligi:

<authorization >
	<allow users="*"/>
	<deny users="?"/>
</authorization>

See tekitab muidugi olukorra, kus ilma paroolita ei saa külastaja mitte ühelegi lehele ligi. Kui soovite osaliselt lubada ka anonüümset ligipääsu, tuleks kas:

  • kõik turvamist vajavad lehed tõsta teise kausta ja lubada juurkausta kõik ning seada täiendavad piirangud alamkaustadele
  • või öelda, et nt default.aspx’i me ei kaitse

Mõlemal juhul tuleb lisada konfiguratsiooni eraldi location element, millega anname teatud asukohale erineva seadistuse. Hetkel läheme seda teed, et lubame kõigil vaadata default.aspx faili.

<location path="default.aspx">
    <system.web>
      <authorization >
        <allow users="*"/>
        <deny users="?"/>
      </authorization>
    </system.web>
</location>

Nüüd tuleks valmis teha kasutajate autentimise vorm logon.aspx. ASP.NET alates versioonist 2.0 on tore selle poolest, et kasutaja tuvastamise vormi ei pea ise moodustama, selle jaoks on spetsiaalne server element nimega logon. Seega näeb meie login.aspx välja järgmine:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="logon.aspx.cs"
         Inherits="logon" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Kasutaja tuvastamine</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Login ID="Login1" runat="server"
                                        OnAuthenticate="TuvastaKasutaja" />
    </form>
</body>
</html>

Koodifailis peame realiseerima kasutajate tuvastamise protseduuri. Hetkel lahendame selle ülilihtsalt. Tegelikkuses peaks olema tegemist mingi andmebaasipõhise kasutaja tuvastamisega.

public partial class logon : System.Web.UI.Page
{
    protected void TuvastaKasutaja(object sender, AuthenticateEventArgs e)
    {
        e.Authenticated = Login1.UserName.ToUpper() == "MATI" && 
                          Login1.Password == "pwd";
    }
}