2009-02-19 8 views
5

In meiner ASP.NET-Webanwendung möchte ich jedes Mal überprüfen, wenn der Benutzer versucht, eine Seite aus meiner Anwendung zu erhalten, wenn der Benutzer in der Datenbank vorhanden ist (natürlich nach der ersten Speicherung) die Benutzerdetails in der Sitzung). Ich habe versucht, das Application_AuthenticateRequest-Ereignis in der global.asax zu Prüfung für jede Anfrage, aber die Sitzung ist nicht in diesem Ereignis vorhanden. Ich brauche einen Ratschlag, wo ich meine Autorisierungslogik setzen kann, dass ich immer noch die Sitzungsdaten verfügbar hätte (um DB-Zugriff zu reduzieren).Berechtigungsprüfung mit Global.asax

Antwort

1

Sie können den SqlMembershipProvider (oder einen benutzerdefinierten Anbieter, wenn Sie nicht MSSQL verwenden) verwenden und nicht authentifizierte Benutzer von der gesamten Anwendung außer von der Anmeldeseite abweisen. Diese Überprüfung ist auf den Zeitpunkt der Anmeldung beschränkt, da das Authentifizierungsticket entweder in der Sitzung oder als Cookie auf dem Computer des Benutzers gespeichert wird.

Weitere Details unter How To: Use Membership in ASP.NET 2.0 und Examining ASP.NET 2.0's Membership, Roles, and Profile

5

Sie klingen, als ob Sie Authentifizierungssystem „Ihre eigenen Rollen“.

Ich würde in der Verwendung von ASP.NET eingebauten System, das häufig mit einem ASP.NET Membership Provider verwendet wird, aussehen. Für SQL Server sind bereits integrierte Anbieter vorhanden, und Sie können Ihren eigenen Mitgliedschaftsanbieter erstellen, indem Sie von der Basisklasse System.Web.Security.MembershipProvider erben.

Im Wesentlichen arbeiten die ASP.NET-Mitgliedschaftsanbieter normalerweise, indem sie einen clientseitigen Cookie (auch bekannt als Authentifizierungsticket) im Browser des Clients festlegen, nachdem sich der Client erfolgreich authentifiziert hat. Dieses Cookie wird mit jeder weiteren Seite Anfrage an den Webserver zurück, so dass ASP.NET und damit Ihren Code, um zu bestimmen, wer der Benutzer ist, in der Regel mit einer einzigen Codezeile wie folgt:

string username = HttpContext.Current.User.Identity.Name; 
// The above gets the current user's name. 

if(HttpContext.Current.User.Identity.IsAuthenticated) 
// Do something when we know the user is authenticated. 

Sie dann sollte nichts im Session-Zustand speichern müssen. Wenn Sie natürlich möchten, um benutzerspezifische Daten in einer Sitzungsvariablen zu speichern (dh Benutzerdaten, die möglicherweise nicht Teil der Authentifizierung eines Benutzers sind, vielleicht die Lieblingsfarbe des Benutzers usw.), dann können Sie diese speichern das in einer Sitzungsvariablen (nach dem Abrufen aus der Datenbank, wenn der Benutzer zum ersten Mal authentifiziert wird). Die Sitzungsvariable könnte basierend auf dem Namen des Benutzers gespeichert werden (unter der Annahme eindeutiger Namen) und unter Verwendung eines Codes ähnlich dem oben genannten abgerufen werden, der den Namen des aktuellen Benutzers erhält, um auf das korrekte Sitzungsobjekt zuzugreifen.

die eingebauten in Formularauthentifizierung verwenden können Sie auch zu „schützen“ Bereiche Ihrer Website von nicht autorisierten Benutzer mit einfachen deklarativem Code, der in Ihrem web.config geht, zum Beispiel:

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

Wenn Sie das oben genannte zu Ihrer "Hauptseite" web.config hinzufügen, stellen Sie sicher, dass keine Ihrer Seiten für nicht autorisierte Benutzer zugänglich ist (obwohl Sie dies wahrscheinlich nie in der Realität tun würden - es ist nur als Beispiel gedacht). Durch die Verwendung von ASP.NET Role Provider in Verbindung mit dem Mitgliedschaftsanbieter erhalten Sie eine noch größere Granularität darüber, wer auf verschiedene Bereiche Ihrer Website zugreifen kann oder nicht.