ASP.NET Webforms Login mit bestehender Datenbank

Es gibt Oracle Server und ASP.NET Webforms und gewachsene Infrastrukturen. Genau so ein Fall ist mir in meiner letzten ASP.NET Webforms Schulung begegnet. Authentication ohne Identity oder Membership Provider. Ganz Easy.

Um ehrlich zu sein, es war doch nicht so einfach. Wenn man heute ein Web Projekt mit Visual Studio anlegt, wird nämlich auf das neue ASP.NET Identity Login gesetzt. Der erste Weg führt in die Datei Web.config um die gute alte Forms Authentifizierung zu aktivieren.

Als erstes wird Zeile 3 entfernt um das Modul im Web Server wieder nutzen zu können.

   1:   <system.webServer>
   2:      <modules>
   3:        <remove name="FormsAuthentication"/>
   4:      </modules>
   5:    </system.webServer>

 

Weiters werden anonyme Zugriffe (das Fragezeichen)  verboten und die Authentication auf formularbasiert eingestellt. Das Login Formular wird als login.aspx deklariert.

   1:     <authentication mode="Forms">
   2: <forms defaultUrl="default.aspx" loginUrl="login"></forms>
   3:      </authentication>
   4:      <authorization>
   5:        <deny users="?"/>
   6:      </authorization>
   7:   

Normalerweise würde man die login.aspx Seite auch nicht aufrufen können, aber ASP.NET fügt eine Ausnahme hinzu. Da im Standard Projekt die FriendlyUrl Erweitertung aktiviert ist loginurl ohne aspx.

Allerdings ist noch eine weitere Erweiterung aktiv die erst, abgedreht werden muss. In der Datei Startup.cs (app_code) muss folgende C# Codezeile entfernt werden :    ConfigureAuth(app);

Die Login Seite enthält neben dem Formular nur eine Zeile, die die eigentliche Authentifizierung durchführt und auf die ursprüngliche angeforderte Seite umleitet. Der zweite Parameter true, setzt den Login Cookie dauerhaft

image

Natürlich wird statt dem if(true) der Vergleich mit Username und Passwort aus der Datenbank durchgeführt.

   1:  <!DOCTYPE html>
   2:   
   3:  <script runat="server">
   4:   
   5:      protected void login_Click(object sender, EventArgs e)
   6:      {
   7:          //superduper komplexe Datenbank abfrage
   8:          if (true)
   9:          {
  10:              FormsAuthentication.RedirectFromLoginPage(benutzer.Text, true);
  11:          }
  12:   
  13:      }
  14:  </script>
  15:   
  16:  <html xmlns="http://www.w3.org/1999/xhtml">
  17:  <head runat="server">
  18:  </head>
  19:  <body>
  20:      <form id="form1" runat="server">
  21:          <div>
  22:              Benutzer<asp:TextBox ID="benutzer" 
runat="server"></asp:TextBox><br />

23: Passwort<asp:TextBox ID="password" Te

xtMode="Password" runat="server"></asp:TextBox><br />

  24:              <asp:Button ID="login" runat="server" 
Text="login" OnClick="login_Click" />
  25:          </div>
  26:      </form>

In allen anderen Seiten kann dann mit dem User Objekt auf den Login Status oder den Usernamen zugegriffen werden.

   1:   <h1>Hallo <%=User.Identity.Name %></h1>
   2:    
Kommentare sind geschlossen