Inhaltsverzeichnis
Authentifizierungsverwaltungsanalyse in .NET Core
0x00 Ursache des Problems
0x01 Authentifizierungsverwaltung in .NET Core
0x02 Anmelden und Abmelden
0x03 Identifizieren Sie den Benutzer durch Cookie
0x04 Schreiben Sie Ihr eigenes Benutzerauthentifizierungsmanagement
Heim Backend-Entwicklung C#.Net-Tutorial Analyse des .NET Core-Zertifizierungsmanagements

Analyse des .NET Core-Zertifizierungsmanagements

Mar 12, 2017 pm 04:36 PM

Authentifizierungsverwaltungsanalyse in .NET Core

0x00 Ursache des Problems

Beim Erstellen eines neuen .NET Core-Webs Projekt Wählen Sie „Persönliches Benutzerkonto verwenden“, um ein Projekt mit Benutzern zu erstellen und Berechtigungsverwaltung. Viele Seiten wie Benutzerregistrierung und Login stehen Ihnen auch zur Verfügung, um verschiedene Aufgaben auszuführen . Diese Art der Berechtigungsverwaltung scheint sehr praktisch zu sein. Aber ich weiß nicht, was der generierte Code für mich tut. Nach einem Blick auf die generierte Datentabelle sind die Funktionen recht kompliziert. Tatsächlich benötige ich lediglich eine Authentifizierungsverwaltung basierend auf Benutzern und Rollen, und Benutzerinformationen nutzen vorhandene Bibliotheken. Die Verwendung der mit .NET Core gelieferten Authentifizierungskomponente muss jedoch auf EF basieren, und viele Tabellenstrukturen stimmen nicht überein Ich muss lernen, dass ich die integrierte Authentifizierungskomponente implementiert und dann meinen eigenen Authentifizierungs--Dienst geschrieben habe, um die Identitätskomponente zu ersetzen. Gleichzeitig wurde Cookie mithilfe der integrierten Authentifizierungskomponente verwaltet Cookie Middleware , Sie können AuthorizeAttribute zur Authentifizierung verwenden. Ich bin noch nicht auf komplexe Anforderungen gestoßen und habe es daher erst hier erfahren. In diesem Blog geht es im einfachsten Fall um die benutzer- und rollenbasierte Authentifizierung. Informationen zur grundlegenden Verwendung der integrierten Authentifizierungskomponenten von .NET Core finden Sie unter http://www.php.cn/.

0x01 Authentifizierungsverwaltung in .NET Core

Wenn es um Authentifizierungsverwaltung geht, denkt der Premierminister an Benutzerregistrierung, Anmeldung, Abmeldung und Hinzufügen/ Entfernen Sie Funktionen wie -Zeichen. Benutzerinformationen, Rolleninformationen usw. werden alle in der Datenbank gespeichert. Es umfasst also hauptsächlich zwei Teile: Datenbankbetrieb und Anmeldegeschäftslogik. Auf der Ebene der Anmeldegeschäftslogik wird .NET Core hauptsächlich über die drei Kernklassen UserManager, RoleManager und SigninManager (in der Microsoft.AspNetCore.Identity-Assembly) verwaltet. Darunter:

  • UserManager ist hauptsächlich für die Benutzerauthentifizierung, Registrierung, Änderung, Löschung und Verwaltung benutzerbezogener Rollen, Token, Anweisungen usw. verantwortlich.

  • RoleManager ist für die Verwaltung von Rollen und rollenbezogenen Anweisungen verantwortlich.

  • SigninManager ist für die Anmeldung, Abmeldung und andere damit verbundene Vorgänge verantwortlich. Wenn Benutzervorgänge beteiligt sind (z. B. Benutzerüberprüfung während der Anmeldung), wird UserManager aufgerufen, um Vorgänge auszuführen.

Beim Betrieb der Datenbank verwenden diese drei Kernklassen UserStore und RoleStore auf Datenbankebene (in der Microsoft.AspNetCore.Identity.EntityFrameworkCore-Assembly). Die Geschäftsbeziehung ist in der folgenden Abbildung dargestellt:

Wir können diese drei Kernklassen bei der Entwicklung authentifizierungsbezogener Funktionen verwenden . Die meisten Bedürfnisse. Wenn wir die Objekte dieser Kernklassen verwenden, werden sie durch Abhängigkeitsinjektion erhalten. Wann werden diese zugehörigen Abhängigkeiten injiziert? In der Startup-Methode „ConfigureServices“ gibt es eine AddIdentity-Erweiterungsmethode, in der alle erforderlichen Abhängigkeiten hinzugefügt werden.

0x02 Anmelden und Abmelden

Nachdem wir die allgemeine Arbeitsteilung der Identitätskomponente verstanden haben, wollen wir Sehen Sie sich die Anmelde- und Teildetails des Abmeldevorgangs an. SigninManager ist hauptsächlich für den Anmelde- und Abmeldevorgang verantwortlich. Schauen wir uns zunächst den Anmeldevorgang an:

Antwort danach erfolgreicher Login Header enthält Set-Cookie Der Key des Cookies muss mit dem in der Cookie-Middleware gesetzten Key des zu entschlüsselnden Cookies übereinstimmen . Dies wird im Screenshot gezeigt. Der Schlüssel von Cookie ist IdentityCookie. Setzen Sie das Cookie und senden Sie eine 302-Weiterleitung zur Anmeldeseite zurück.

Bei der Weiterleitung zur Anmeldeseite enthält die Anfrage bereits ein Cookie, dessen Schlüssel auf IdentityCookie gesetzt ist.

Der Abmeldevorgang ist relativ einfach. Rufen Sie HttpContext.Authentication auf .SignOutAsync-Methode zum Abmelden. Zu diesem Zeitpunkt wird Set-Cookie zu HttpContext.Response hinzugefügt, der Inhalt ist jedoch leer.

In .NET Core durch CookieAuthenticationMiddleware ist eine Middleware, die authentifizierungsbezogene Cookies in HttpContext identifiziert und dadurch die Authentifizierungs- und Autorisierungsinformationen des Benutzers hinzufügt. Das Wichtigste ist das ClaimsPrincipal-Objekt, das die Authentifizierungs- und Autorisierungsinformationen des Benutzers aufzeichnet (darüber hinaus kann es natürlich auch andere alle benötigten Informationen enthalten). oben, nachdem sich der Benutzer erfolgreich angemeldet hat, werden die Authentifizierungs- und Autorisierungsinformationen im ClaimsPrincipal-Objekt gespeichert (tatsächlich werden die Authentifizierungsinformationen in diesem Cookie-Schlüssel-Wert-Paar als ClaimsIdentity gespeichert, und ein ClaimsPrincipal kann mehrere ClaimsIdentity enthalten) und dann hinzufügen Set -Cookie zu den Headern von HttpContext.Response, mit dem Schlüssel. Der in der Cookie-Middleware angegebene CookieName und Value sind die verschlüsselte Zeichenfolge dieses Objekts. In Zukunft wird HttpContext über dieses Cookie verfügen. Die Cookie-Middleware entfernt das Cookie, das diesem CookieName entspricht, entschlüsselt es, stellt es im ClaimsPrincipal-Objekt wieder her und setzt HttpContext.User auf dieses Objekt. Später, wenn die MVC-Middleware Routing an den entsprechenden Controller und die Aktion durchführt, kann sie HttpContext.User basierend auf der in der Autorisierung angegebenen Authentifizierung und Rolle einchecken Wenn die Prüfung nicht erfüllt ist, springen Sie zur entsprechenden Seite. Daher ist zu beachten, dass die Cookie-Middleware vor der MVC-Middleware platziert werden muss.

Eine besondere Erwähnung verdient hier ClaimsPrincipal. Ein ClaimsPrincipal-Objekt enthält ein oder mehrere ClaimsIdentity-Objekte. Ein ClaimsIdentity-Objekt entspricht im Allgemeinen einem bestimmten Schlüssel-Wert-Paar in einem Cookie (persönliches Verständnis). Cookie-Middleware und ClaimsIdentity sind über AuthenticationScheme verbunden. Wenn wir später unseren eigenen Authentifizierungsdienst schreiben, machen wir auch das AuthenticationScheme der Cookie-Middleware mit der erstellten ClaimsIdentity konsistent. Daher ist es genauer zu sagen, dass ClaimsIdentity Ansprüche für Benutzerauthentifizierung und Berechtigungen enthält, während ClaimsPrincipal mehrere ClaimsIdentity enthalten kann. Wenn sich mehrere Cookie-Middlewares in der Pipeline befinden, werden sie durch AuthenticationScheme unterschieden.

Zusätzlich zu AuthenticationScheme gibt es zwei weitere wichtige Attribute in ClaimsIdentity, UserType und RoleType, wobei UserType den Benutzerauthentifizierungstyp und RoleType den Rollenüberprüfungstyp angibt . Das heißt, wenn ich den RoleType als „RoleName“ spezifiziere, dann suche ich bei der Rollenauthentifizierung nach allen Werten vom Typ „RoleName“ in Claims und prüfe, ob sie den in Authorize angegebenen RoleName enthalten. .NET Core verfügt jedoch über ClaimTypes und kann direkt verwendet werden. Der Rollentyp ist beispielsweise ClaimTypes.Role. Wenn Sie beim Hinzufügen einer Rolle die integrierte ClaimTypes.Role verwenden, müssen Sie den RoleType beim Erstellen von ClaimsIdentity nicht explizit angeben. Die Standardrollenauthentifizierung verwendet ClaimTypes.Role.

Das Hinzufügen von Cookie-Middleware wird über die Erweiterungsmethode app.UseIdentity in der Methode „Configure“ im Startup implementiert. Diese Erweiterungsmethode fügt tatsächlich eine Vielzahl von Cookie-Identifizierungsmethoden hinzu. Ich werde nur eines verwenden, wenn ich später meine eigene Benutzerauthentifizierungsverwaltung schreibe.

0x04 Schreiben Sie Ihr eigenes Benutzerauthentifizierungsmanagement

Nachdem wir den Benutzerauthentifizierungsprozess verstanden haben, können wir unser eigenes Authentifizierungsmanagement schreiben, um die Identitätskomponente zu ersetzen, die ebenfalls in Datenbankoperationen und Authentifizierungsgeschäftslogik unterteilt ist . Ich werde nicht viel über die Datenbank sagen. Sie ist alles in der IdentityRepository-Klasse geschrieben, die nur sehr einfache Datenoperationen hat. Der Einfachheit halber wird Dapper verwendet und die Datenbank ist Sqlite. Das Programm überprüft beim Start die Datenbanktabelle. Ist dies nicht der Fall, erstellt es automatisch eine leere Tabelle.

Der Authentifizierungsdienst ist auch relativ einfach in der IdentityService-Klasse geschrieben, die Registrierungs- und Anmeldevorgänge bereitstellt. Das Abmelden ist zu einfach. Der Einfachheit halber wird keine Rollenverwaltungsseite bereitgestellt. Wenn Sie die Rollenauthentifizierungsfunktion testen möchten, müssen Sie Role manuell zur Datenbank hinzufügen und dann Role zum Benutzer in UserRoles hinzufügen.

Anmelden:

Registrieren:

Abmelden:

Nur ​​zum Testen gibt es viele logische Probleme, wie z. B. die Klartextspeicherung von Benutzerpasswörter. Konzentrieren Sie sich auf den Prozess:)

0x05 Schreiben Sie es am Ende

Dies ist das erste Mal, dass ich mit dem Web in Kontakt komme Anwendungen, und viele Konzepte sind mir unbekannt. Sehr verständnisvoll. Nehmen wir als Beispiel Benutzer der Cookie-Authentifizierung. Ich wusste bisher nur, wie man Benutzer mithilfe von Cookies identifiziert. Ich dachte immer, dass ich nach Erhalt von Cookies die entsprechenden Berechtigungsinformationen aus der Datenbank oder dem Cache finden würde. Nachdem ich jedoch den integrierten Cookie-Middleware-Code gelesen hatte, wurde mir klar, dass die Authentifizierungsinformationen direkt im Cookie gespeichert sind und daher nur entschlüsselt und deserialisiert werden müssen. Die Identity-Assembly umfasst viele andere Assemblys (Sicherheit, HttpAbstraction usw.), was mir schließlich schwindelig wurde, aber ich habe mich nicht mit vielen Details befasst, die auf Code basieren , und einige basieren auf persönlichem Verständnis. Ich hoffe, dass jeder barmherzig ist, wenn es Fehler gibt.

Das obige ist der detaillierte Inhalt vonAnalyse des .NET Core-Zertifizierungsmanagements. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

See all articles