Transkripte
1. Einführung: Hey, danke fürs
Vorbeischauen und Willkommen
beim Dotnet Six-Authentifizierungs
- und Autorisierungskurs. Mein Name ist Patrick Guards. Vielleicht kennst du mich schon von meinem YouTube-Kanal, wo
ich hauptsächlich über
Webentwicklung mit Dotnet und
Blazer und auch Angular
React und so weiter gesprochen Webentwicklung mit Dotnet und habe. Wenn Sie also
den Kanal nicht bereits kennen , möchten Sie
vielleicht einen Blick darauf werfen. Vielen Dank
für Ihre Überlegung, aber natürlich können Sie auch
einfach bei mir bleiben denn in diesem
Authentifizierungsautorisierungskurs lernen
Sie, wie Sie
einen Benutzer in einer Datenbank erstellen. Wenn Sie also einen Benutzer registrieren und diesen Benutzer
protokollieren, betteln Sie die Breite, Benutzernamen und das Passwort. verwenden wir einen Passwort-Hash Dafür verwenden wir einen Passwort-Hash
und das Passwort-Salz. Und dann erstellen wir
ein JSON-Web-Token. Dies ist also eine wichtige Sache des Authentifizierungsprozesses. Zusätzlich zum
JSON-Web-Token werden
wir auch Aktualisierungs-Token verwenden. Wenn also das
JSON-Web-Token abgelaufen ist
, schauen wir uns
das Aktualisierungstoken an und wie Sie das JSON-Web-Token
mit diesem Aktualisierungstoken aktualisieren
können. Und darüber hinaus werden wir uns
natürlich
einen Blick auf die Straße werfen. Dies ist also n, der
Berechtigungsteil, in dem wir Ansprüche verwenden
werden , um einem Benutzer
bestimmte Rollen zu geben , und nur
mit einer bestimmten Rolle kann
der Benutzer bestimmte Endpunkte aufrufen
. Das
werden wir also tun. Sie sind jetzt
angefeuert und möchten an
diesem Kurs teilnehmen ,
weil er nicht so
lang ist und
Sie in dieser
kurzen Zeit all dies mit dotnet sechs tun können. Ich hoffe, Sie
in der ersten Lektion zu sehen.
2. Kursübersicht: Vielen Dank, dass Sie jetzt
an diesem Kurs teilgenommen haben, zunächst einen echten schnellen Überblick.
Was wirst du tun? Es geht um JSON-Web-Token, Aktualisierungs-Token und Rollen. Und natürlich das
allererste, was wir dafür
brauchen, unsere Nutzer. Wir
erstellen also zunächst ein Benutzermodell
und auch einen Benutzer-DTO, also
Datenübertragungsobjekte, damit wir
Benutzernamen und Passwort im
Klartext an die Web-API senden . Und daraus werden wir Passwort-Hash
und das Passwort-Salz
erstellen. Und dann werden wir es tun,
das ist wichtig. Wir speichern den vollständigen Benutzer
mit dem Benutzernamen und dem ID-Passwort, dem
Hash, dem Passwort-Salz in der Datenbank. Alles klar, also werden
wir das zuerst machen. Und danach würden wir
versuchen, diesen Benutzer einzusperren. Also verwenden wir
den gleichen Benutzer DTO,
senden den Benutzernamen und das
Passwort für das Protokoll n. Es ist dasselbe, was wir
für die Registrierung verwendet haben. Dieses DTO wird dann in unserer Web-API
verwendet. Wir werden den
Passwort-Hash erneut mit Hilfe
des Salzes erstellen , das dann in der Datenbank
gespeichert wird. Das ist es, was Sie
tun werden und wenn alles korrekt
ist, stimmen der Benutzername und das Passwort
mit
den Mitarbeitern überein, die wir gesehen haben oder die
wir in der Datenbank gespeichert haben. Dann erstellen wir
das JSON-Web-Token. Dies ist also der allererste Schritt. Danach können
wir auch Aktualisierungs-Token erstellen. Und danach werden wir uns
auch die Rollen ansehen. Also jetzt Benutzer- und
JSON-Web-Tokens, Fangen wir an.
3. Erstellen Sie das Projekt: Wir sind mit Visual Studio
2022 hier und
erstellen wir nun ein neues Projekt. Ich nahm an, dass Sie das Dotnet Six STK bereits installiert haben. Das sind natürlich
Anforderungen. Also bitte, wenn Sie zum Beispiel bei
Google
noch nicht nach den Dotnet SDKs gesucht haben, und
installieren Sie dieses Ding einfach. Und danach öffnen Sie
Visual Studio 2022
natürlich, das ist
auch eine Voraussetzung, aber ich denke, Sie haben das alles
schon bekommen. Und dann erstellen wir ein ASP
NET Core Web API-Projekt. Also einfach ein Backend in
dieser Klasse hier. Und jetzt nennen wir dieses Ding
Authentifizierung Web API. Zum Beispiel,
Authentifizierung Web API es ist Standort, liegt
ganz bei Ihnen. Das ist in Ordnung. Auch hier ist dotnet sechs das
Framework, das wir verwenden möchten. Wir brauchen keinen
Authentifizierungstyp. Wir machen das diesmal manuell. Wir konfigurieren für HTTPS,
das ist in Ordnung. Wir verwenden den Controller, daher verwenden wir hier
keine minimalen APIs. Und wir ermöglichen Open API-Unterstützung. Das bedeutet, dass
wir Swagger
verwenden können , um unsere API zu testen. Also lasst uns dann
unser Projekt erstellen. In Ordnung, und wie Sie sehen können, haben
wir
hier bereits
unser Beispielprojekt mit den Wettervorhersagen. Ich nehme an, dass du das Zeug schon
weißt. Das ist also nichts für den
absoluten Anfänger hier. Also werde ich
hier nicht tief in Bezug auf das
Beispielprojekt eingehen . Wir fangen sofort an. Das erste, was wir brauchen, ist, dass
wir nach der Erstellung
dieses Projekts einige Modelle hinzufügen.
4. Hinzufügen des Benutzermodells: Das allererste, was wir
brauchen, ist das Benutzermodell. Dafür. Lassen Sie uns
zuerst einen neuen Ordner erstellen und diese Modelle aufrufen. Jetzt fügen wir hier eine neue Klasse hinzu
und dies wird der Benutzer sein, und dies wird auch
die Entität sein , die in der Datenbank
gespeichert wird. Also lass uns das Ding geben I D. Was ich hier mache, ist Requisite für Eigenschaft zu
tippen, zweimal Tab zu
drücken, und dann können wir bereits die nächste Eigenschaft eingeben, die den Benutzernamen ist. Und das ist standardmäßig eine leere
Zeichenfolge. Und anderes Nächstes ist
das schon
interessant und wichtig. Wir speichern einen Passwort-Hash, das Passwort-Salz
in der Datenbank. Also nicht das, was
hier von IntelliJ-Code vorgeschlagen wird. Wir werden das Byte-Array speichern, das ist der Passwort-Hash. Und wir können diesem tatsächlich
einen Standardwert
wie Byte-Array 32 geben . Das ist okay. Aber auf sehr wichtig für uns
könnte es eigentlich auch jetzt sein. Aber auf diese Weise sehen wir
diese grünen, scharfen Linien dann nicht . Also bleib einfach hier bei mir. Ich denke, das ist vollkommen in Ordnung. Jetzt ist das Salz. Und nochmal, lassen Sie uns dieses
Ding standardmäßig Byte-Array geben. Ordnung, das
ist also unser Benutzermodell, und in ein paar Minuten werden
wir es auch in der
Datenbank speichern. Aber zuerst werden wir dies tun,
was bedeutet, einen Benutzer ohne
Datenbank zu registrieren und erst wenn wir dies
implementiert haben , und Sie haben
bereits die Idee bekommen, wie Registrieren und Erstellen
eines Passwort-Hash funktioniert. Dann speichern wir das
auch in der Datenbank. Das ist also unser Benutzermodell und wir brauchen schon
eine weitere Sache. Und das wäre das
Datenübertragungsobjekt für den Benutzer,
was bedeutet, dass wir ein anderes Objekt benötigen, ein anderes Modell, bei dem wir den Benutzernamen
und dann das echte Passwort im
Klartext an die Web-API übertragen
können . Fügen wir hier also ein anderes Modell hinzu. Wir fügen eine Klasse hinzu und sagen
dann Benutzer D TO. Natürlich könntest du hier auch verschiedene Ordner
verwenden. Sie könnten zum Beispiel diese
Ordnerentitäten aufrufen
und den Benutzer einfach hierher stellen, da dies eine Entität ist
, die dann auch in der Datenbank
dargestellt wird. Und dann sind ein weiterer
Ordner für das DTO die Datenübertragungsobjekte und fügen Sie
einfach den Benutzer DTO hier hinzu. Das liegt ganz bei dir. Die Sache mit einem Benutzer DTO ist
jetzt, dass wir
dieses Ding verwenden werden , um einen Benutzer zu
registrieren
und auch den Benutzer zu protokollieren.
Sie fragen sich vielleicht, warum Sie nicht
ein
Anforderungsobjekt für Benutzerregister und den Benutzer verwenden Benutzerregister und den Benutzer Login-Anforderungsobjekt
beispielsweise Nun, wir können dieses DTO
hier für beide Anwendungsfälle verwenden. Geben wir einfach die
erste Eigenschaft ein, bei der es eine Zeichenfolge
handelt,
die tatsächlich der Benutzername ist. Und standardmäßig wird
dies an die Zeichenfolge leer gesendet. Und jetzt tatsächlich das Passwort. Diesmal
ist das richtig, okay, jetzt sind das alle
Modelle, die wir vorerst benötigen, der nächste Schritt ist bereits, dass wir den
Authentifizierungscontroller
hinzufügen. Also lasst uns das als Nächstes machen.
5. Hinzufügen des Authentication: dem
Authentifizierungscontroller klicken wir mit
der rechten Maustaste auf den Controller-Ordner und steuern
dann einfach den
ersten Menüeintrag hier. Und dann bekommen wir
ein paar Vorschläge. Wir möchten keinen MVC-Controller verwenden
, wir möchten einen
API-Controller verwenden. Sie sehen es hier
haben wir eine leere, wir haben bereits eine Breite, Lese- und Schreibaktionen. Dies wird dann
einen generierten Code für
alle CRUD-Vorgänge bereitstellen , erstellen, lesen,
aktualisieren und löschen. Und wir haben
dieses Ding bereits mit
Entity Framework hier bekommen. So viel Code wurde bereits für uns
generiert. Meiner Meinung nach ist es immer
am besten oder fast immer am besten, einen leeren
zu benutzen, denn dann kann
man alles
von Grund auf neu bauen. Sie haben die ganze
Kontrolle und
wissen , was hier tatsächlich gemacht wird. Und Sie können, Nun,
Sie haben die meiste Kontrolle über Ihren Code für
Lernzwecke. Natürlich
ist ein leerer auch ziemlich ordentlich. Erstellen wir also einen
leeren API-Controller und wir nennen
dieses Ding jetzt einfach aus dem Controller
zur Authentifizierung. Hier. Was ich jetzt schon tun
möchte, ist
die Methode zur Registrierung des Benutzers zu schreiben . Was wir also tun können, ist
einfach eine öffentliche asynchrone Aufgabe, dann ist das tatsächliche Ergebnis, das tatsächliche Ergebnis, das tatsächlich
ausreichen würde, völlig ausreichend. Wenn Sie jedoch
die tatsächlichen Modelle sehen möchten , die in der Silva-Benutzeroberfläche
dargestellt sind, müssen Sie
ein tatsächliches Ergebnis verwenden und dann das genaue Modell definieren
, das hier zurückgegeben wird. Und jetzt ertragen Sie mit mir, wir werden den Benutzer
mit einem Passwort-Hash zurückgeben. Und jetzt in
der Produktion würdest du so etwas natürlich nicht
machen. Sie würden einfach die
SMS senden, vielleicht Tasche oder einfach nur einen Erfolgsstatuscode 200, okay. Wo die Anwendung, die Front und dann weiß, dass
alles richtig gelaufen ist. Aber in unserem Fall, um vorerst
zu sehen , was hier tatsächlich
passiert, werden
wir den Benutzer zurückgeben. Dies dient wirklich nur zu
Lernzwecken. Und wir brauchen eine andere, wir brauchen hier eine Verwendungsreferenz, indem wir die Direktive verwenden,
Authentifizierung, Web-API-Modelle verwenden. Und da ich ein
fauler Programmierer bin oder einfach nur das neue
Zeug von C-Sharp Ten benutzen
möchte. Lassen Sie uns ein globales verwenden, das
hier im Programm CS verwendet wird. Nun, wir wissen schon, kennen
auch das Modell hier in dieser Klasse im
Earth Controller, obwohl wir hier keine
Referenzbearbeitung haben, Ist das nicht nett? Nennen wir diesen
Registerbenutzer. Hier ist jetzt der Benutzer DDoS
unsere Anforderungsobjekte hier drin. Jetzt können wir einfach einen neuen Benutzer
erstellen. Auch dies ist nur für den Moment. In ein paar
Minuten werden wir
dieses Ding in der Datenbank speichern . Aber jetzt
sehen wir uns einfach an, wie das aussieht, wenn wir einen neuen Benutzer
mit dem angegebenen Benutzernamen erstellen. Und dann kehren wir zurück, okay, also Statuscode 200
mit dem Benutzer hier. Okay, also das ist unsere Methode. Und jetzt das Letzte
, was wichtig ist, brauchen
wir eine HTTP-Anforderungsmethode. Und dafür verwenden wir
die post-Methode, um
eine Aktion zu identifizieren , die
die HTTP-Post-Methode unterstützt. Jetzt speichern wir das
und führen Sie
es bereits aus und testen Sie es ein wenig.
6. Erster Test mit SwaggerUI: Hier ist also unsere Anwendung oder die Swagger-Benutzeroberfläche, damit wir unsere neue API testen
können. Und jetzt verwenden wir einfach diese Off-Methode hier, du
siehst sie schon. Der Benutzer DTL. Die Anfrage ist also ein
Benutzername und ein Passwort und wir erwarten ein
Benutzerobjekt, das ist das Richtige. Und wir sehen auch unsere Modelle hier. Das ist also der Benutzer und
dies ist der Benutzer D TO. Alles klar, also schreiben wir es
einfach raus. Vielleicht können wir
etwas wie Iron Man machen, passwort, pepper, auf Execute klicken. Und was sehen wir? Id ist nicht als 0. Das ist richtig. Wenn wir eine Datenbank verwenden, wird dies anders sein. Die Datenbank wird hier
die Arbeit für uns erledigen und eine ID 123 hinzufügen und so weiter. Benutzername ist Ich bin geblieben. Wir sehen also, dass das
tatsächlich funktioniert hat. Und diese
Hash-Werte sind hier die initialisierten
Byte-Arrays. Also hat es
hier natürlich nichts mit diesem Passwort gemacht, aber wir sehen, dass unsere
API bereits funktioniert. Der nächste Schritt, den ich machen
möchte, ist, dass wir die
Abhängigkeitsinjektion verwenden möchten ,
denn wenn wir unsere ganze Logik
hier im Controller haben, ist
dies ein PHET-Controller der nicht die beste Vorgehensweise ist. Lassen Sie uns das also ein
wenig ändern und die nächste Lektion. Und wir fügen den Auth Service hinzu
und legen dann die Logik dorthin.
7. Hinzufügen des Authentifizierungsdienstes: nun für den Auth Service Erstellen Sie nun für den Auth Service einen neuen Ordner neu
und rufen Sie diese Dienste auf. Und auch ein anderer Ordner
hat diesen Off-Dienst abgerufen. Im Moment erstellen wir
eine Schnittstelle für diese Schnittstelle namens I of Service und auch eine Implementierungsklasse, die
diese Sache des Dienstes genannt wird. Und natürlich setzen wir hier
die KI des Dienstes um. Und wenn Sie auf Speichern klicken, möchten
wir alle unsere Änderungen neu aufbauen und
anwenden. Und um sicher zu sein, dass die Abhängigkeitsinjektion
wir arbeiten werden, müssen wir diesen
Service hier im Programm CS registrieren. Wir schreiben
Gebäudetechnik und gehen. Es ist ein Scope Service des Typs, der im Servicetyp für
die spezifische
Servicesammlung
angegeben ist. In Ordnung, und jetzt haben wir den Service hier im
Auge behalten. Ich muss es richtig schreiben, um diesen Off-Service zu
bedienen. Und natürlich fügen wir die
using-Direktive hinzu und fügen auch das globale Schlüsselwort hinzu, damit
unser Controller in einer Minute auch weiß, wo
wir diesen Service finden
können. Jetzt ist dieses Ding registriert. Dies bedeutet, dass wir
es in einer Minute in den
Erdkontroller injizieren können. Aber lassen Sie uns zuerst
unsere Register-Methode hier in die Schnittstelle stellen. Task-Benutzer. Rufen Sie diesen Registerbenutzer erneut
mit dem Benutzer DTO
an und rufen Sie dies einfach auf Anfragen. Jetzt heb dir das auf. Und natürlich habe ich es zu früh
gespeichert, weil es noch nicht
implementiert ist. Mit der Kontrollperiode können
wir die Schnittstelle
jedoch mit dem Schlüsselwort async implementieren. Im Wesentlichen können wir
diese Zeile hier
vom Controller kopieren diese Zeile hier
vom Controller und diesen Benutzer einfach zurückgeben. Und wir sind damit fertig,
die Logik vom Controller
zum Autorendienst zu verschieben . Und das nächste
ist, dass wir
diesen Service injizieren und
alles zusammenstellen müssen. Also lasst uns das als nächstes machen.
8. Inject the Service (Dependency Injection): Um dieses Ding zu injizieren, gehen wir
zum Off-Controller und fügen hier zuerst
einen Konstruktor mit CTE ODER hinzu und drücken
dann zweimal Tab. Und hier jetzt
sagen wir ich vom Dienst, rufen dieses Ding aus dem Dienst
und auch mit Kontrollzeit ab. Jetzt können wir dieses Feld erstellen und
zuweisen, dass dieser Dienst jetzt
überall in diesem
Controller verfügbar ist , und ich möchte
diesen Unterstrich hier hinzufügen. Und jetzt hier unten
in dieser Methode sagen
wir zum Beispiel, dass Virusantwort registrierte
Benutzeranfragen abwägt . Siehst du das? Jetzt haben
wir diese Logik, sind zum Autorendienst verschoben, und der Controller leitet die Anfrage nur an
den Dienst weiter
und gibt die Ergebnisse zurück. In unserem Fall wäre dies
dann die Antwort. Jetzt können wir alles speichern, erneut
testen und das Ergebnis
sollte genau gleich sein. Hier sind wir. Schon wieder. Das ist unser Endpunkt. Wir probieren das
nochmal mit Iron Man aus. Und dieses Passwort
hier klicken Sie auf „Ausführen“. Und das ist genau das Gleiche was
wir bereits gesehen haben,
wenn wir es nicht sind,
nicht die Abhängigkeitsinjektion verwenden. Aber das Tolle
ist jetzt, dass Sie
den Dienst und die Logik
überall in
Ihre Anwendung injizieren den Dienst und die Logik können. Und es ist definitiv
eine bessere Vorgehensweise. Okay, das ist also der
erste Boilerplate-Code. Und jetzt ist das Nächste,
den Passwort-Hash
tatsächlich zu erstellen. Also lasst uns das als nächstes machen.
9. GitHub Repo: Kurz bevor wir die Methode zum
Erstellen des Passwort-Hash
schreiben, haben wir
bis jetzt schon ein paar Sachen
gemacht, also denke ich, dass es gut ist,
dies in ein Git-Repository zu schieben. Das hab ich getan. Und du kannst
den Code jetzt genau hier bekommen. Wenn Sie es also nicht selbst schreiben
möchten, ist es jetzt ein guter Zeitpunkt, den Code hier aus
meinem GitHub-Repository zu holen. Siehe die URL hier, github.com Schrägstrich Patrick hat eine Web-API zur Slash-Authentifizierung erhalten. Hier
finden Sie also den vollständigen
Quellcode aus dieser Klasse. Das nur für einen kurzen Hinweis. Also nochmal, wenn du den Code nicht selbst schreiben
willst, aber ich
empfehle es wirklich, denn das ist der
beste Weg zu lernen. Sie können den Code hier abrufen
oder wenn Sie Probleme haben. Auch hier kannst du den Code
natürlich
auch jetzt auf GitHub abrufen.
10. Passwort erstellen Hash: Dann erstelle ich
den Passwort-Hash. Was wir jetzt tun,
ist, dass wir
zum Auth Service zurückkehren und einfache Methoden
schreiben. Das ist also eine private Lücke und wir nennen dies Create
Password Hash. Dieses Ding bekommt jetzt ein Passwort. Das ist also das Passwort und Klartexte und dann
zwei Out-Parameter, und dies wäre das
Passwort-Hash-Byte-Array und das Passwort Salt Out Bites Passwort-Hash und auch
Bytes, Passwortsalze. Wie macht man das jetzt? Eigentlich ist es nicht viel. Wir erstellen zuerst eine Instanz
eines Kryptografie-Algorithmus und in unserem Fall verwenden
wir HMac 512. Auch hier brauchen wir eine
Used-Direktive, Kryptographie der Systemsicherheit
verwendet. Und hier, wenn wir diese Instanz haben, haben
wir bereits ein
Passwort-Salz und ich komme in einer Sekunde zum
Passwort-Salz zurück. Das wäre also HMac
und dann der Schlüssel, das ist unser Salz. Um nun den Passwort-Hash zu erhalten, sagen
wir compute Hash und dann Systemtexte, die UTF-8 codieren erhalten
Systemtexte, die UTF-8 codieren, Bytes und dann das Passwort. Nun, was
hier mit der Methode zum Erstellen von
Passwort-Hash-Methode passiert , erzeugen
wir ein Salz. Dies ist, wie es hier heißt, ein Schlüssel,
der in der hMac-Berechnung verwendet wird. Und wenn Sie das
Salz mit dem Passwort kombinieren, erhalten
Sie einen anderen
Passwort-Hash, obwohl Sie
dasselbe Passwort verwenden. Um
den gesamten Prozess hier besser zu sehen ,
würde ich sagen, dass wir das einfach testen. Verwenden wir bereits die Methode zum Erstellen von
Passwort-Hash-Methode. Und dann werden Sie
sehen, wenn wir
den Passwort-Pepper
mehrmals verwenden , erhalten
wir einen anderen
Passwort-Hash-Wert. Das ist wegen des Salzes. Aber wenn er immer das gleiche Salz
verwenden würde, wäre
der Passwort-Hash derselbe. Und das Problem dabei
ist, dass
sehr kluge Leute eines Tages die
Kryptografie-Algorithmen knacken und dann einen Passwort-Hash sehen können. Und vom Passwort-Hash können
sie zum
Flugzeug-Text-Passwort gelangen. Aber das wird nicht mit einem Salz
gemacht. heißt, wenn sie das Salz
nicht kennen, können
sie das
Passwort, das echte Passwort, nicht erhalten. Alles klar, also lass uns das einfach
versuchen und dann wirst du sehen, was ich damit meine. Wenn wir also zuerst einen Benutzer
registrieren, sagen
wir, dass wir
den Passwort-Hash erstellen. Also, erstellen Sie einen Passwort-Hash. Dieses Ding bekommt hier
das Passwort. Und jetzt der Passwort-Hash, das Passwort-Salz
, das zurückgegeben wird. Sinnvoll. Hier. Wir bekommen dieses Ding und
auch die Passwortsalze. Alles klar, jetzt haben wir
unseren Hash- und Salt-Wert. Und jetzt hier für den Benutzer, was wir tun, ist, dass wir nicht
nur den Benutzernamen setzen, sondern auch den
Passwort-Hash auf Passwort-Hash setzen. Hier unten setzen wir das Passwort
Salz auf Passwortsalze, okay, und dann
geben wir den Benutzer zurück. Also lasst uns das jetzt versuchen. Starten Sie die Anwendung neu. Wieder, wenn wir Ironman benutzen. Und was sehen wir jetzt? Wir sehen diese verrückte Saite hier oder nach einem Array für Bx und so weiter. Wenn ich es jetzt noch einmal versuche, sehe ich anders aus und schaue
auch wieder anders an. Lasst uns das
ein bisschen anders machen. Nehmen wir an, wir geben diesen
Kryptografie-Algorithmus bereits wie das
neue Byte-Array 32 angegriffen. Dies wird also der
Schlüssel sein, der hier verwendet wird. Okay, sieh es dir hier an. Es gibt eine Überlastung
der einen, die, die Instanz ohne
den Schlüssel oder das Salz, und die Instanz
mit diesem Salz bedeutet, dass der Algorithmus jetzt
in dieser Compute-Hash-Methode verwendet wird dieses Salz hier jedes
Mal, wenn wir das machen. Speichern wir das
noch einmal und starten Sie die Anwendung neu, um sicher zu sein. Wir versuchen es noch einmal. Probieren Sie es aus. Mann. Kein Pfeffer. Wir drücken Execute for M MPH und führen erneut
für MPH aus und so weiter. Jedes Mal. Das Gleiche, was Sie darin sehen,
ist der Grund, warum wir ein Salz brauchen. Das Salz ist das gleiche und das
Klartext-Passwort ist das gleiche, dann erhalten wir jedes Mal den gleichen
Hashwert. Es ist also dasselbe, wenn Sie überhaupt kein Salz verwenden
würden,
was bedeutet, dass ein bestimmtes
Passwort immer denselben Hashwert
ergibt und umgekehrt und Essenz. Und wenn wir
das jetzt wieder entfernen und wirklich einen neuen zufällig
generierten Schlüssel als Salz
verwenden, erhalten
wir ein anderes Passwort,
einen anderen Passwort-Hash. Jedes Mal
verwenden wir diesen Algorithmus. Alles klar, sieh es dir hier an. diesem Grund verwenden wir Salz. Ich hoffe, du hast die Idee. So erstellen wir
einen Passwort-Hash. Und jetzt bevor wir mit der
Anmeldung des Benutzers fortfahren und dann das JSON-Web-Token
erstellen. Ich würde sagen, wir fügen unsere Datenbank hinzu und
speichern den Benutzer mit dem Passwort-Hash
und dem Salz und so
weiter in dieser Datenbank. Lass uns das als Nächstes machen.
11. Hinzufügen des DataContext & Entity Framework Core: In Ordnung, also wollen wir Entity Framework Core
hier und auch eine
Fortsetzungs-Lite-Datenbank
verwenden . Diesmal verwende ich
verschiedene Datenbanken in meinen Kursen
und Tutorials. Dieses Mal verwenden wir eine
SQL-Light-Datenbank. Dies ist plattformübergreifend und
ziemlich einfach zu erstellen. Das allererste, was
wir jetzt tatsächlich nutzen
können ist, dass wir Datenkontexte
benötigen. Also erstellen wir noch einmal einen neuen
Ordner namens diese Daten. Hier. Jetzt fügen wir eine neue Klasse und nennen diesen
Klassendatenkontext. Und dieses Ding hier benutzt
die DB-Kontext-Klasse. Es ist hier nicht bekannt. Mit der Kontrollzeit erhalten
wir also einige Vorschläge. Und wir möchten dieses
Ding hier verwenden, Paket,
Microsoft Entity Framework Core installieren , die neueste
Version
finden und installieren, die bereits erledigt ist. Jetzt ist es fertig. Und wieder können wir
hier eine
globale Used-Richtlinie verwenden , weil wir dieses
Ding an mehreren Stellen brauchen. Also lasst uns das so machen. Und jetzt haben wir einen
DB-Kontext hier. Mit diesen DB-Kontexten können
wir jetzt von unserer Datenbank aus auf die
Benutzer zugreifen. Und du siehst es hier. Es besagt, dass eine
DB-Kontext-Instanz
eine Sitzung mit der Datenbank darstellt und zum Abfragen
und Speichern von Instanzen, Instanzen Ihrer Entitäten,
verwendet werden
kann . Db-Kontext ist eine Kombination aus Der Db-Kontext ist eine Kombination aus Arbeitseinheit und
Repository-Muster. In Bezug auf das
Repository-Muster ähnelt
es unserem
Auth Service, da wir diesen Kontext
jetzt
beispielsweise in unseren Auth
Service injizieren und dann wieder
auf die Benutzer
in der Datenbank zugreifen können beispielsweise in unseren Auth
Service injizieren und dann wieder . Aber wir müssen immer noch
etwas tun, um das tun zu können. Schließlich
ist das erste der Konstruktor. Wieder mit CD ODER wir sind
wieder unser Konstruktor. Das Argument hier sind jetzt
die DB-Kontextoptionen. Das Ding hier mit unserer Klasse. Und wir nennen das Optionen. Und wir
müssen den
Basiskonstruktor auch mit Basisoptionen aufrufen . Das ist jetzt der
Konstruktor, den wir brauchen. Und das Letzte, was die
Benutzer hinzufügen
oder genauer gesagt ist, um
die Benutzertabelle in der Datenbank hinzuzufügen , benötigen
wir hier eine Eigenschaft. Und das ist vom Typ db, der mit der Benutzerklasse
festgelegt wurde. Wir nennen das dann Benutzer und dies wird der Name unserer Tabelle sein. Normalerweise würden Sie den Namen
dieser Entität einfach pluralisieren. Benutzer würden also
völlig ausreichen. Und ich denke, das ist ein
guter Name für diesen Tisch. Das müssen wir
tun, um diese Tabelle hinzuzufügen. Und wenn Ihnen diese
grüne Squiggly Line hier nicht gefällt, können
Sie bereits sagen, dass dies
eine Reihe von Benutzern wie diese ist, und dann erhalten Sie keine
Warnung mehr. Okay, lasst uns das aufheben. Und jetzt besteht der nächste Schritt darin,
Code-erste Migrationen
zu verwenden , um unsere Datenbank zu erstellen. Bevor wir das tun können, müssen
wir natürlich die Entity Framework Core-Tools installieren . Also lasst uns das als Nächstes machen.
12. EF Core Tools installieren: Installieren Sie die Entity
Framework-Core Tools Wir haben die
Paketmanager-Konsole geöffnet. Sie können dieses Ding auch
hier unter anderen Fenstern öffnen hier unter anderen Fenstern und dann erhalten Sie die
Package Manager-Konsole. Und dafür sollte es auch
eine Abkürzung geben. Und hier
drinnen
müssen wir als Erstes im
richtigen Verzeichnis sein. Also müssen wir in
unser
Authentifizierungs-Web-API-Verzeichnis gehen . Da sind wir. Dann müssen wir
die Bewerbung beenden. Also schließe einfach das Terminal hier. Und jetzt sind wir in der Lage, die EF Core-Tools
und dann die Migration zu
installieren. Stellen Sie also bitte sicher, dass Sie
die Anwendung beenden, da wir
sonst den Code nicht zuerst Migrationen
ausführen können , sondern zuerst die Tools dafür. Wir sagen dotnet new
install und dann dash, dash global und
dann dotnet dash EF. Jetzt habe ich es in meinem Fall bereits
installiert, also lass
es mich einfach schnell deinstallieren. Also können wir das hier zusammen machen. Deinstallieren Sie dotnet ef. Du siehst es hier, Version 6.3. Und wenn ich den
Installationsbefehl erneut ausführe, bekomme
ich Version 604. Und mit dotnet E F können
wir es noch einmal überprüfen. Und es gibt die
Entity Framework Core dotnet-Befehlszeilentools. Also dieses Ding
wurde ich installiert und als nächstes verwenden wir
zuerst Code, Migrationen.
13. Verwenden von Code Erste Migrationen: Wir befinden uns im richtigen Verzeichnis. Wir haben die
Befehlszeilen-Tools installiert, wir haben das NuGet-Paket von Energy Framework installiert, aber es gibt zwei weitere
NuGet-Pakete, die wir installieren müssen. Und das ist das
Designpaket und das SQL Lite-Paket von
Energy Frame ein Kern. Jetzt, das Design, du
wirst es in einer Minute sehen. Lass mich das einfach aufmachen. Klicken Sie also mit der rechten Maustaste auf das Projekt, NuGet-Pakete
verwalten Und dann sagen wir einfach Design und ich denke,
wir kriegen das schon. Verwenden Sie dann unbedingt
die Registerkarte „Durchsuchen“ hier. Da ist es, Microsoft Entity Framework Core
Design gemeinsame Entwurfszeitkomponenten für den
Eintrag aus einem Kern-Tools. Das ist also wichtig für uns. Klicken Sie auf OK, ich akzeptiere und dann Entity Framework
Core SQL light. Wenn Sie also
eine SQL Light-Datenbank verwenden möchten, müssen
Sie
diesen SQL-Datenbankanbieter
für Entity Framework Core installieren . Wenn Sie SQL Server verwenden möchten, dann ist es eine Essenz nur
Entity Framework, Core Dot SQL Server und so weiter. Also bitte installiere
dieses Ding jetzt. Okay, ich akzeptiere, dass wir unsere NuGet-Pakete haben, damit
wir das schließen können. Der nächste Schritt besteht darin, unsere Datenbankkontexte zu
registrieren. Also nochmal zum Programm CS. Jetzt hier unten sagen wir Build
Services und fügen dann D B-Kontexte mit der
Datenkontext-Klasse hinzu. Und dieses Ding. Jetzt müssen wir zuerst
eine weitere hinzufügen, die das hier errichtete benutzt. Lassen Sie uns nochmals
das globale Schlüsselwort hinzufügen. Jetzt haben wir
unseren Datenkontext, und dies bekommt eine Option. Sagen wir Optionen. Optionen. Wir möchten sagen, dass
wir
SQL-Licht verwenden möchten und hier
eine Verbindungszeichenfolge hinzufügen können. Jetzt würden Sie normalerweise
die Verbindungszeichenfolge
beispielsweise in der JSON-Datei der
App-Einstellungen speichern. Sie können dies oder
den schnellen und schmutzigen Weg immer noch tun , da sich nur um eine
SQL-Light-Datenbank handelt.
Schnelle und schmutzige Möglichkeit besteht darin, einfach die Zeichenfolge hier und die
Verbindungszeichenfolge für
eine SQLite-Datenbank
einzugeben . Lassen Sie mich das in eine neue Zeile setzen, ist einfach Datenquelle und
dann zum Beispiel von Dot DB. Der Dateityp ist dann DB
und es wird einfach abgesagt. Das liegt ganz bei dir. Sie können einen beliebigen Namen verwenden. Und so
registrieren wir den DB-Kontext. Damit können wir dann
die erste Code-Migration verwenden um unsere Datenbank
mit der Benutzertabelle zu erstellen. Also gehen wir erneut zur Package
Manager-Konsole und
stellen sicher, dass wir in
unser Projektverzeichnis abgelegt werden. Also Authentifizierung Web API, Authentifizierung Web API, ist
es in diesem Fall. Und dann können wir
einfach dotnet ef sagen. Dann lasst uns einen kurzen Blick darauf werfen. Wir haben drei Befehle, Database DB, Kontext
und Migrationen. Und um eine Migration hinzuzufügen, verwenden wir Migrationen, also dotnet EF-Migrationen
und fügt dann hinzu, und dann
nennen wir dies einfach Initial. Es baut, aber
es ist gelungen und es ist im Wesentlichen
schon erledigt. Was wir jetzt bekommen, ist hier ein
Migrationsordner. Und hier sehen Sie auch, was passieren
wird, wenn wir diese Migration
ausführen. Wir erstellen eine Tabelle und
verwenden uns mit einer ID, die
auf automatische Inkremente gesetzt ist. Also haben wir die
ID 123 usw.
automatisch
den Benutzernamen
als String oder Texttyp bekommen . Und die Byte-Arrays
werden dann mit dem Typ blob verwendet. Und wir haben hier bereits
einen Primärschlüssel bekommen. Und wenn ich diese
Migration oder Rolle,
die Rolle, diese Migrationsbank, entferne , dann lassen wir diese Tabelle einfach fallen. Und jetzt haben wir
die Datenbank noch nicht, oder? Was
passiert jetzt, wenn wir sagen, dass dotnet EF-Datenbank-Update
es nicht nur aktualisiert, sondern auch
diese Datenbank erstellt. Okay, also siehst du hier
alle Befehle, aber es
ist erfolgreich und es gibt jetzt eine Create-Tabelle. Dies ist nur für Energy
Framework, das Migrationssystem. Und wo ist es
hier die Tabellenbenutzer. Das ist erledigt. Und hier sehen wir das aus DB-Datei und
können diese
Datei tatsächlich öffnen und schauen. Wir laden noch eine Sache herunter und dies wäre
der DB-Browser, der Datenbankbrowser
für SQL-Leitung. Also lasst uns das als Nächstes machen.
14. Öffnen Sie die Datenbank mit dem DB für SQLite: Und das ist das, was Sie
brauchen, um einfach den
TB-Browser für SQL Lite weiterzuleiten oder zu SQL browser.org zu gehen. So sieht es aus. Gehen Sie einfach zu
Download und
holen Sie sich dann für Ihr Betriebssystem dieses Ding. Mein Fall, ich weiß
es nicht und installierte den DB-Browser für Fortsetzungslicht, das Standard-Installationsprogramm
für 64-Bit-Windows. Also bitte hol dir dieses Ding und
dann solltest du es hier holen. So sieht es aus.
Und jetzt können wir die Datenbank öffnen. Da sind wir. Das ist unser Ordner, das ist der Off-DB. Also lasst uns das Ding öffnen. Und Sie sehen hier, dass wir Tabelle
unserer Benutzer
mit diesen Feldern haben. Und wir können es natürlich auswählen und dann zu Daten durchsuchen gehen. Und hier sehen wir, dass
wir keinen Benutzer haben. Der nächste Schritt besteht also darin, den Benutzer bei der
Registrierung
in der Datenbank endgültig zu
speichern . Also lasst uns das in
der nächsten Lektion machen.
15. Benutzer in der Datenbank speichern: In Visual Studio gehen wir
zurück zum Off-Service. Jetzt. Wir fügen zuerst einen Konstruktor hinzu,
denn wenn Sie sich erinnern, wollten
wir
die Datenkontexte injizieren. CTO ist also, dass es vom Service ist. Und hier sagen wir jetzt
Datenkontext. Kontext. Auch hier erstellen und weisen wir
das Feld und einen Unterstrich zu. Jetzt haben wir unsere
Datenkontexte und als Nächstes sagen
wir Kontexte, Benutzer, Sie sehen es bereits hier. Wir haben die Tabelle unserer Benutzer, Add User Entity
Framework-Knoten , die Sie dem
Benutzer wünschen, aber wir sind noch nicht fertig. Wir müssen diese Änderungen auch in
einem Gewichtungskontext
speichern . Änderungen asynchron speichern, in Ordnung, und das ist alles. Lassen Sie uns diese App jetzt noch einmal ausführen. Und ich würde sagen,
wir fügen zwei Benutzer hinzu. Hier sind wir. Schon wieder. Wir probieren das zum Beispiel
mit Iron Man Pepper aus, der exekutiert. Dies ist das Ergebnis. Sie
sehen jetzt, dass die ID eins ist und wenn wir zu unserem Browser gehen ,
aktualisieren wir die Daten. Ist Iron Man mit ID1, Passwort-Hashing,
Passwort-Salz, Blobs und allem. Lasst uns noch eins hinzufügen. Nur zum Spaß. Batman-Passwort,
vielleicht wird es ausgeführt. Wir haben ID2 und das Gleiche hier. In Ordnung, also funktioniert das. Der nächste Schritt besteht nun darin,
ein JSON-Web-Token zu erstellen und zurückzugeben. Also lasst uns das als nächstes machen.
16. Hinzufügen eines AuthResponseDto: Es werden vier sein. Wir können tatsächlich
das JSON-Web-Token erstellen. Wir müssen ein paar Sachen vorbereiten. Eine Sache ist, dass wir das Passwort beim Login
überprüfen müssen. Und das
sagt Ihnen bereits, dass wir
natürlich auch
eine Login-Methode benötigen. Und dann ist
das dritte, dass wir
ein anderes DTO brauchen , um das
JSON-Web-Token am Ende zurückzugeben.
Nun, es stimmt nicht ganz,
dass wir dieses DTO wirklich brauchen. Am Ende dieser Klasse haben
Sie jedoch , am Ende dieses Kurses die Möglichkeit ein JSON-Web-Token
zusammen mit einem Aktualisierungstoken
zurückzugeben. Und das ist dann nur
für das Frontend. Es gibt also Daten
in dieser Antwort AN, die
für das Frontend hilfreich sind. Das werden
wir also tun. Zuerst erstellen wir hier
ein anderes Modell. Klicken Sie mit der rechten Maustaste auf den Modellordner, fügen Sie eine neue Klasse hinzu, und jetzt nennen wir diese
Sache der Antwort d t. Jetzt erhält dieses Ding
einige Eigenschaften. Die erste Unterkunft, die
sich vielleicht fragt, warum zum Teufel
brauchen wir so etwas? Nun, ich nenne es Erfolg. Man kann es als erfolgreich bezeichnen. Dies wird zum Beispiel dem Frontend
mitteilen, ob diese Anfrage erfolgreich war, und wir werden dies verwenden,
um dem Frontend mitzuteilen , dass das Passwort falsch
war oder dass der
Benutzer nicht existiert oder dass alles in Ordnung ist. Und in diesem Fall ist
dieses Flag auf true gesetzt, aber wir initialisieren
es mit Fehlern. Mit diesen Informationen kann
das Frontend jetzt
andere Dinge zusammen
mit dieser Eigenschaft machen , was die Nachricht wie diese ist. Und das ist
standardmäßig die Zeichenfolge leer. Und wenn
Sie diese
Authentifizierungsantwort nicht in DTO
zurückgeben möchten , können
wir auch sagen dass der Controller damit
etwas macht. Wenn
wir zum Beispiel den Controller
erneut verwenden, um die Anfrage an
den Dienst weiterzuleiten und der Dienst diesen
DTO zurückgibt, ist dieses Objekt hier. Und wir sehen, dass der Erfolg darin besteht, das Erfolgs-Flag
auf false gesetzt ist und wir
eine Meldung haben , als ob ein
Passwort falsch ist, dann können wir uns auch entscheiden, das vollständige Objekt nicht zurückzugeben. Wir können einfach sagen, dass wir zum Beispiel eine schlechte
Anfrage zurückgeben, oder ein nicht autorisiertes Sagen,
was immer Sie wollen. Mit dieser Art von Objekt wärst du also einfach flexibler. Nun, das Letzte, was
vorerst endlich das Token ist. Lassen Sie uns diesen Bereich hier entfernen. Und das ist auch
eine leere Zeichenfolge. Erstens, okay, das ist also unser Autoren-Response DTO
mit einem Erfolgs-Flag, der Nachricht und dem Token. Und als nächstes schreiben wir
eine Methode zur Überprüfung des Passworts, bevor wir dann
endlich die
Anmeldemethode implementieren können .
17. Passwort überprüfen: Es geht darum, das Passwort zu überprüfen. Wir gehen zurück zu unserer
Mauer eines Dienstes. Dies ist wieder eine private Methode die diesem Ding
ähnlich ist. So können wir kopieren und einfügen, zumindest versuchen, diese Methode hier zu kopieren und
einzufügen. Und anstatt
einen Passwort-Hash zu erstellen, möchten
wir jetzt
den Passwort-Hash überprüfen. Geben wir einfach „Verify“ ein. Auch hier erhalten wir die
Flugzeugkennwörter als String. Und jetzt auch der
Passwort-Hash und das Passwort Salz, aber nicht als unsere Parameter. Wir bekommen das von
der Login-Methode. Und jetzt hier drin haben wir das
schon gemacht. Vielleicht erinnern Sie sich daran, dass wir diesen
Kryptografie-Algorithmus
geben können , diese H-Mix scharfe 512-Instanz. Wir können diesem Ding
ein Salz und dieses Salz geben. Dann versuchen wir,
den Hash basierend auf dem
angegebenen Passwort zu berechnen , oder? Jetzt sagen wir, dass unser
berechneter Hash-Wert dieses Ding mit
dem angegebenen Passwort Salz
und dem angegebenen Passwort
ist . Danach geben wir berechnete Hash-Sequenz gleich
und dann Password Hash zurück. Da es sich um Byte-Arrays handelt, müssen
wir Sequenzgleich verwenden. Natürlich haben wir
unseren Rückgabewert
hier in einen booleschen Wert geändert . Wir müssen also
sequenzgleich verwenden , da es
sich um Byte-Arrays handelt. Wenn Sie
nur die Gleichheitszeichen verwenden würden,
entspricht der berechnete Hash
dem Passwort-Hash, dies würde nicht funktionieren. Sie also bitte sicher, dass Sie
die Reihenfolge gleich verwenden. Sagt es hier, bestimmt, was die beiden Sequenzen gleich sind,
indem die Elemente verglichen werden, indem der
Standardgleichheitsvergleich für ihren Typ verwendet wird. Und in unserem Fall ist das
der Biss und der Typ. Also ein Byte für Byte, dies wird
bei dieser Methode verglichen. Dann wissen wir, ob das
Passwort richtig ist oder nicht. Lassen Sie uns nun als Nächstes
die Anmeldemethode implementieren.
18. Implementieren der Anmeldemethode: Für die Login-Methode gehen
wir
hier wieder zur Schnittstelle und geben eine Aufgabe zurück. Und jetzt siehst du es mit
der Antwort des Autors. In DTO. Wir nennen diesen Login mit Benutzer
DTO erneut als Anfrage. Und ich gehe zurück zur
Implementierungsklasse. Wir können das Interface automatisch
implementieren. Und hier unten sind die Methoden. Lass es mich einfach hochziehen. Lass es uns vielleicht hier machen. Da ist es. Das erste
ist, dass wir den Benutzer brauchen. Sagen wir also, var
user ist jetzt Waitz. Kontexte scheinen, dass
Visual Studio das async-Schlüsselwort hier bearbeitet hat,
sobald ich , während ich „
Wartezeit“ tippte . Das ist ziemlich nett. Denken Sie also daran, wenn dies nicht der Fall ist, müssen
Sie
das asynchrone Schlüsselwort hinzufügen. Jetzt Kontexte und jetzt
können wir auf unsere Benutzer zugreifen. Dann sagen wir zuerst
oder Standard asynchron. Und hier sagen wir U für den Benutzer, wo der Benutzername auftritt, den Benutzernamen anfordern, und
falls der Benutzer null ist, dann können wir jetzt zurückkehren
und Sie alle entsprechen dem Erfolgs-Flag
ist standardmäßig falsch. Aber wir können auch eine Nachricht
hinzufügen, wie Benutzer zum Beispiel nicht gefunden wird, gerade jetzt weiß der
Controller das. Und auch wenn du dieses Objekt
zurückgibst, die Front und weiß
das auch. Der nächste Schritt, wenn
wir den Benutzer gefunden haben,
besteht darin, das Passwort zu überprüfen. Auch hier beginnen wir mit einem If
- und dann Ausrufezeichen. Also prüfen wir, ob das Passwort
nicht korrekt ist , es ist nicht verifiziert. Sie geben diese Methode ein Passwort
anfordern. Und dann haben wir den Benutzer gefunden. Also verwenden wir den Passwort-Hash
des Benutzers und auch das
Passwort-Salz des Benutzers. Wenn das falsch ist, wir erneut eine neue
Auth Response DTO mit einer
anderen Nachricht zurück ,
wie zum Beispiel Wrong password. Dies wird dann überprüft und
wenn jetzt alles in Ordnung ist, geben
wir eine neue
Autorenantwort zurück, D20. Und sagen wir einfach, die
Erfolgsflagge ist auf wahr gesetzt. Vorerst. Das war's. Wir haben kein Token erstellt. Wir möchten in diesem Schritt zunächst zu
Lernzwecken überprüfen, ob der Login mit dem Benutzernamen
und Passwort
im Allgemeinen funktioniert . Und um dies testen zu können, brauchen
wir jetzt natürlich einen anderen
Endpunkt. Gehen wir also zurück zu unserem
Off-Controller. Schon wieder. Kopieren wir
diese Methode einfach hier. Wir nennen das jetzt einfach einloggen. Wir nennen hier auch
unsere Login-Methoden. Und jetzt sagen wir, wenn die
Antwort erfolgreich ist, können
wir eine OK-Antwort zurückgeben. In Ordnung, also geben wir
die vollständige Antwort zurück. Und sonst können wir
zum Beispiel entscheiden, dass wir könnten, wir könnten auch ein
Okay mit der Antwort zurückgeben. Und dann
muss das Front-End in diesem
Fall prüfen, ob der Erfolg
wahr oder falsch ist , und dann
die Fehlermeldung anzeigen oder nicht, können wir etwas anderes tun. Wir können sagen, dass schlechte Anfragen
eine schlechte Anfrage zurückgeben und einfach die
In-Response-Nachricht hinzufügen. Wieder, wie ich bereits sagte, als wir
die Auth Antwort
auf dieses Ding hier erstellt haben , liegt
ganz bei Ihnen. Wenn du denkst, du
hast ein Frontend und willst eine 200 in Ordnung schicken. Zurück. Auf jeden Fall
okay, oder zurück, okay. Und dann Antwort,
dann muss die Front dann entscheiden, was zu tun ist, dann mach es bitte auf jeden Fall
so. Sie
müssen also hier nicht mit
dieser IF-Klausel nachsehen dieser IF-Klausel nachsehen ob diese Antwort
erfolgreich ist oder nicht. Und dann kannst du einfach die Antwort in der Front erreichen und erledigt die ganze Arbeit, oder wenn du es so machen willst und
das liegt wirklich
ganz bei dir. Meinung nach gibt es hier keine bessere Praxis
. Es hängt wirklich von der
Anwendung ab, die Sie erstellen möchten. Aber für unsere Testzwecke, Lernzwecken, denke
ich, dass dies in Ordnung ist. Wir prüfen, ob die
Antwort erfolgreich ist. In diesem Fall geben wir
das komplette Ding zurück. Ansonsten sehen wir eine schlechte Anfrage
nur mit der Nachricht. Und jetzt das Letzte, was wir tun
müssen , können Sie es hier sehen. Wir haben hier eine Post-Methode und auch eine andere
Post-Methode hier. Das würde also nicht funktionieren. Dies sind zwei genau
die gleichen Endpunkte mit genau den gleichen Routen. Also einfach API und dann aus
für die Steuerung ein Ziel. Also lasst uns das ändern
und wir können
dies hier mit HTTP-Posts ändern . Und dann legen
wir in Klammern den Weg zum Login fest. Und das ist nur eine andere Möglichkeit, so etwas zu schreiben. Wir können hier auch ein anderes
Attribut hinzufügen, das Routenattribut, und dann
einfach den Login hier entfernen. Das ist im Wesentlichen
genau das Gleiche. Kombinieren wir also einfach das HTTP-Post-Attribut
mit dem routen-Attribut. Und dann haben wir
unsere Endpunkte. Und jetzt würde ich sagen, dass wir
das speichern und das schon testen. Alles klar, da erinnern wir uns, dass
wir bereits unsere Benutzer haben, Iron Man und Batman. So können wir die Login-Methode hier tatsächlich direkt
testen. Probieren Sie es also aus. Testen wir es zum Beispiel
einfach. Testen Sie es mit einer Zeichenfolge,
Zeichenfolge, die wir ausführen können, und wir sehen, dass der richtige
Nachrichtenbenutzer nicht gefunden wurde. Und Sie sehen hier auch den
Statuscode 400. Schauen wir uns zum Beispiel hier auf der Registerkarte „
Netzwerk“ an, versuchen
wir es noch einmal. Klicken Sie auf Ausführen. Wenn du es wieder siehst. Dies ist der Statuscode 400
, der für eine schlechte Anfrage steht. Das ist also genau
das gleiche Zeug hier. Und jetzt testen wir
es mit Iron Man, aber das Passwort ist String. Wir klicken auf „Ausführen“, wir erhalten
eine schlechte Anfrage mit der Nachricht falsches
Passwort, das ist richtig. Geben Sie nun das richtige Passwort ein. Wir sehen unsere Auth Response
DTO mit Erfolg, wahr, ohne Nachricht, ohne Token. Aber das
werden wir als nächstes ändern. Jetzt werden wir endlich das JSON-Web-Token
erstellen.
19. Erstellen und geben Sie ein JSON Web Token zurück: In Ordnung, also zurück
zu Visual Studio. Und jetzt ist das allererste, was wir brauchen, tatsächlich ein Geheimnis. Denn mit diesem Geheimnis kann
das Back-End überprüfen, ob das JSON-Web-Token, das das Frontend oder der
Benutzer sendet, der Client an das
Backend sendet, tatsächlich gültig ist. Mit diesem Geheimnis
erstellen wir das
JSON-Web-Token neu und wir werden
dieses Geheimnis auch verwenden , um
das JSON-Web-Token zu überprüfen , und nur das Backend
kennt dieses Geheimnis. Das Geheimnis ist im eigentlichen Token
im Wesentlichen nicht verfügbar, dann kennt nur das Backend das Geheimnis und die
Breite dieses Geheimnisses. Wir können das
eigentliche JSON-Web-Token überprüfen. Dies ist sehr wichtig und es gibt mehrere
Möglichkeiten, dies zu tun. Natürlich können Sie
im Auth Service direkt bearbeiten. Sie können in einem Geschäft bearbeiten, oder der einfachste Weg
wäre hier, in unserem Fall in dieser Klasse, in unserem Fall in dieser Klasse, die benachbarte Datei der
App-Einstellungen. Also fügen wir hier einen weiteren Abschnitt hinzu, wir nennen diese App-Einstellungen. Und dann geben wir einfach Token ein. Und das kann
alles sein, was du willst. Jede Art von Zeichen
kann hier verwendet werden, jede Folge von Zeichen, wie mein streng geheimer Schlüssel, stellen Sie
einfach sicher,
dass dieser mindestens 16
Zeichen und Zeichen enthält, oder? Mindestlänge
sollte also 16 Zeichen betragen. Und damit können wir jetzt auf den geheimen Schlüssel von
Token zugreifen und unser JSON-Web-Token
erstellen. Generieren wir damit jetzt das Token. Aber wir müssen auch
einige NuGet-Pakete einfügen. Aber dieses Mal
machen wir das einfach auf dem Weg. Zurück zu unserem Off-Service. Lass uns hier runter gehen. Wir erstellen eine neue Methode,
private Zeichenfolge, Create Token, und wir
erhalten den Benutzer hier. Das erste, was die Ansprüche auflisten, und
wir brauchen einen weiteren Namespace für diese Systemsicherheitsansprüche. Jetzt nennt man das Ansprüche und dies ist eine
neue Liste außerhalb des Anspruchs. Hier. Jetzt legen wir bereits einige Werte
fest, also fügen wir einen neuen Anspruch hinzu. Mit Anspruchstypen
Namenskennung Dies ist die ID des Benutzers. Also Benutzer-ID, und setzen
Sie diese dann auf eine Zeichenfolge
oder Transfers an eine Zeichenfolge. Lasst uns auch noch einen hinzufügen. Also neuer Anspruch, Name der Anspruchstypen, und dies ist dann
der Benutzername. Dies ist bereits eine Zeichenfolge, also fügen wir einfach die Komponente hinzu oder wir
brauchen hier kein Komma. Noch nicht, noch nicht. Später, wenn wir die Straßen hinzufügen, fügen
wir hier einen weiteren Anspruch hinzu. Ich kann Ihnen schon sagen
, was sind die Ansprüche? Nun, im Wesentlichen
sind dies Informationen von
den Benutzerdaten, die im JSON-Web-Token gespeichert werden ,
und wir
werden uns das JSON-Web-Token ansehen und
dann sehen, was dort tatsächlich
gespeichert ist. So dass der Anspruch bisher
für Informationen einen Anspruch
darstellt. Hier können Sie also alles speichern, im Wesentlichen alle gewünschten
Informationen. Dies möchten wir im JSON-Web-Token
speichern. Damit weiß der Client
, der weiß, okay, was ist die Idee des
derzeit authentifizierten Benutzers oder des Benutzernamens und so weiter. Stimmt's? Jetzt ist das Nächste ein Schlüssel, ein symmetrischer Sicherheitsschlüssel. Erstellen wir dieses
Ding also mit Var-Schlüssel, neuen symmetrischen Sicherheitsschlüssel. Und wir brauchen hier schon
eine andere Referenz. Dieses Mal. Wie ich bereits sagte, haben wir das Paket
Microsoft Identity
Model zwei Token
installiert und die neueste
Version
gefunden und installiert, wenn Sie es hier im
Kontextmenü nicht sehen. Gehen Sie erneut zu
NuGet-Pakete verwalten und installieren Sie dieses
Paket
dann manuell hier oder machen Sie es so. Also sollte es installiert werden. Lasst uns damit aufhören. Und da sollte es sein. Wir haben den Microsoft Identity Model ist
Token-Namespace. Lassen Sie uns
das einfach schnell
zum Programm CS bringen, weil ich diese globale Bank hierher machen möchte . Und jetzt fügen wir
diesen Namespace hinzu. Großartig, also lasst uns zu unserer Methode
zurückkehren. Wir haben unseren symmetrischen
Sicherheitsschlüssel, aber er bekommt einige Argumente. Das Erste ist jetzt das Erste
und das Einzige, was
genauer zu sein ist, ist unser Geheimnis. Mit unserem streng geheimen Schlüssel können
wir diesen
symmetrischen Sicherheitsschlüssel erstellen. Lassen Sie uns also die
Systemtextcodierung, UTF-8, beantworten Sie Bytes. Und jetzt müssen wir auf die Konfiguration
zugreifen, nämlich die App-Einstellungen JSON. Also müssen wir die
Abhängigkeitsinjektion nutzen. Und wir machen das hier oben. Also was wir brauchen, um das zu injizieren, die Augenkonfiguration. Rufen Sie diese Konfiguration auf. Erstellen Sie erneut eine Zuweisung
der Feldkonfiguration, den Unterstrich hier, so. Jetzt können wir hier unten den
Konfigurationsabschnitt sagen. Und das sind jetzt, sind jetzt
Einstellungen davon, das Token davon. Jetzt wollen wir den
Wert, schließen Sie das. Und wir haben unseren
symmetrischen Sicherheitsschlüssel. Mit diesem Schlüssel können wir die
Anmeldedaten erstellen, die auch für unser Token
erforderlich sind. Nennen wir das Credits. Jetzt ist es ziemlich komplex, aber so kann man ein JSON-Web-Token
erstellen. Ich hoffe, du bist immer noch bei mir. Es ist zum Beispiel kein guter Zeitpunkt, im
Multitasking zu sein. Also komm bitte zu mir zurück wenn du
den Code zusammen mit mir schreiben willst. Jetzt kannte das Signieren von Anmeldeinformationen
mit unserem neuen schönen Schlüssel. Und wir brauchen einen Algorithmus. Und jetzt verwenden wir die
Sicherheitsalgorithmen. Ich möchte tatsächlich den HMac SHA,
Mac Shot 12 Signaturalgorithmus
verwenden . In Ordnung, also das ist der Richtige. Mit diesen Credits. Jetzt können
wir mit diesen
Anmeldeinformationen ein
JWT-Sicherheitstoken erstellen. Also angrenzendes Web-Token, Sicherheitstoken, Var-Token. Jetzt ein neues JWT-Sicherheitstoken. Wir brauchen hier etwas anderes, Token für
Systemidentitätsmodelle JWT. Bitte installieren Sie
dieses Paket erneut. Andererseits müssen wir hier einige Argumente
hinzufügen. Zuerst der Anspruch, also wird dieser dann in diesem neuen Token gespeichert. Dann müssen wir
ein Verfallsdatum festlegen. Und sagen wir, dieses Ding
ist für einen Tag gültig, also datetime jetzt und Tage eins. Alles klar. Als Nächstes sind
die Anmeldeinformationen
jetzt auf Credits festgelegt. Und lasst uns das
Zeug hier entfernen und V sind fertig. Jetzt ist das unser Token und bekomme
auch die letzte Zeichenfolge, das endgültige JSON-Web-Token. Wir nennen var JWT, neues JWT,
Sicherheitstoken, einen Handler. Hier sagen wir jetzt Token mit dem Token und dann geben
wir das JWT zurück. Atme tief durch. Ich weiß, dass es komplex ist, aber so wird es gemacht. Wichtig ist, dass wir unsere Ansprüche im JWT
speichern. Wir legen ein Ablaufdatum und auch die
Anmeldedaten fest. Dies ist hier für
unseren streng geheimen Schlüssel und den
Token-Bereich für App-Einstellungen. Auch hier ist es. Das ist unser geheimer Schlüssel. Und jetzt ist es natürlich an
der Zeit,
dieses Ding wieder auf
die Login-Methoden zurückzurufen . Da sind wir. Sagen wir einfach String-Token. Es ist jetzt ein Token
mit unserem Benutzer zu erstellen. Hier drin. Jetzt setzen wir das Token,
Token, sicher alles, okay,
und ich würde wissen, sagen wir, lass uns das testen, lass uns das mal überprüfen, weil ich denke, dass ich das früher
gesehen habe, also lasst uns das nochmal speichern. Und ich denke, das würde
sonst zu einem Fehler führen. Also lasst uns das Komma hier hinzufügen. Und jetzt testen wir
die Anwendung. Versuchen wir uns erneut anzumelden. Probieren Sie es nochmal mit Iron Man aus. Wenn Sie auf „Ausführen“ klicken, ist es da. Dies ist unser benachbartes
und Web-Token. So sieht dieses Ding aus. Jetzt gibt es eine schöne Seite namens JWT. Oh, da ist es. Wo können Sie
Ihre JSON-Web-Token einfügen. Schau dir einfach an,
was da drin ist. Und wie Sie hier sehen können, der erste Teil zum ersten
hier, die erste Periode. Wir können den Algorithmus
und den Tokentyp sehen. Wir haben unsere H-Mischung
aus fünf Zwölftel. Der Algorithmus-Token-Typ
ist ein JWT-Token. Und jetzt haben
wir die Nutzlast
der Forderungen, eine Namenskennung. Dies ist die Benutzer-ID und
auch das Ablaufdatum, das gut ist, am
nächsten Tag und 21:14 Uhr. Jetzt könnten wir die Signatur
überprüfen. Das ist also sehr ordentlich,
der geheime Schlüssel, aber wie Sie sehen können, ist er hier nicht verfügbar, nur die
Back-End-Knoten dieses geheimen Schlüssels. Und
schauen wir uns noch mal mit Batman an. Batman und ärgern. Wir klicken auf Ausführen, kopieren es, fügen es hier ein und Sie sehen, dass sich
etwas geändert hat ,
nämlich
der Name identifizierbar , natürlich ist dies jetzt id2, wie Sie auch hier sehen können, ID 12. Und jetzt haben wir eine Minute später das
Ablaufdatum. In Ordnung, also funktioniert das. Wir haben unser
JSON-Web-Token und was
sollen wir jetzt damit machen? Nun, lassen Sie uns
einen anderen Endpunkt erstellen nur für
die Autorisierung von Benutzern
zur Verfügung steht. Ich würde sagen. Jetzt mit diesem Endpunkt ist
es absolut
notwendig, dieses
Token zum Header
Ihrer Anfrage hinzuzufügen . Und nur dann können Sie oder
auf diese Endpunkte zugreifen. Und ich würde sagen:
Lass uns das als nächstes machen.
20. Einen gesicherten Endpunkt für autorisierte Benutzer hinzufügen: Okay, also zurück zu Visual Studio. Lassen Sie uns diesen Endpunkt jetzt erstellen. Und ich mache es einfach hier in der Off-Controller- oder
Service-Implementierung. Eigentlich wollen wir nur überprüfen, ob der Benutzer autorisiert
ist und in der
Lage ist, dieses Ding aufzurufen. Jetzt erstellen wir einfach
eine GetMethod mit HTTP. Auch dies ist jetzt unsere
HTTP-Anforderungsmethode. Lassen Sie uns einfach eine
öffentliche Aktionsergebnisse verwenden. Also jetzt keine Aufgabe, keine asynchrone Methode hier
und wir geben einfach einen String zurück. Und nennen wir das Aloha,
weil ich es liebe, wie Y. Dann können wir auch zurückkehren. Okay? Aloha. Sie sind autorisiert. Okay, großartig. Dies ist also unser Endpunkt, dh wenn wir dies jetzt aufrufen, sollte
jeder
auf diese Nachricht zugreifen
oder diese Nachricht erhalten können . Testen wir das also ganz schnell. Da ist es, die
GetMethod hier, API aus. Wir haben das ausprobiert, wir haben Execute-Noten
getroffen, obwohl ha, du bist autorisiert. Jeder kann das machen. Aber jetzt wollen wir dieses Ding
sichern. Und der einfachste Weg, dies
zu tun, ist, dass wir nur die autorisierten Attribute
verwenden. Autorisieren Sie es also,
es ist noch nicht bekannt, also müssen wir den Namespace verwenden, Microsoft ASP NET
Core-Autorisierung. Und das war's. Großartig. Testen wir das zuerst. Also zurück zu Vaguer. Ich hoffe, dass es wieder aufgebaut wird. Machen wir es
hier einfach manuell, um absolut sicher zu sein. Ok. Jetzt hat es die
GetMethod hier gemacht. Jetzt klicken wir auf Versuch es aus, führen aus und wir erhalten einen Fehler. Nun, ich erwarte, dass
kein
Authentifizierungsschema angegeben ist . Damit Sie sehen, dass Sie das JSON-Web-Token
verwenden können, benötigen
wir ein
Authentifizierungsschema. Lassen Sie uns das also schnell hinzufügen
. Wir gehen zurück zu unseren Programmen, ja. Und jetzt müssen
wir hier unten noch mal ein paar Sachen schreiben. Zuerst Builder-Dienste und fügen Sie
dann die Authentifizierung hinzu. Dieses Ding. Jetzt, wenn wir
wieder ein bisschen kompliziert werden, wollen
wir einen
JSON-Web-Token-Inhaber Standardeinstellungen haben. Das ist nicht bekannt, also schauen wir uns mal an. Wir können das
Paket installieren Microsoft ASP.NET Core
Authentication, JWT-Bearer. Das brauchen wir, denn
dies ist ein Inhaber-Token. Finde und installiere also
die neueste Version. Wenn dieses Ding installiert ist. Wir können dann ein
Authentifizierungsschema verwenden. Natürlich haben wir die App
gestoppt und jetzt weiß sie, was hier
los ist. Der Standardwert wird
von der Paarauthentifizierung verwendet. Träger der Begriff Bär. Vielleicht
hast du es schon gehört. Es ist nur ein Träger-Token im
Wesentlichen nur eine Zeichenfolge. Es kann eine kurze
Zeichenfolge entlang der Zeichenfolge sein, angrenzendes Web-Token,
irgendetwas anderes? Es wird nur als Träger bezeichnet und Sie werden in der
Kopfzeile sehen, dann fügen wir auch den Wert-Inhaberraum und dann das JSON-Web-Token hinzu. Aber wir werden
das in einer Minute sehen. Vorerst hier drinnen
Authentifizierungsschema. Jetzt sagen wir, fügen Sie JWT Vera
mit einigen Optionen hinzu. Natürlich sehen diese
Optionen so aus. Zuerst haben wir Optionen, Token gültige Parameter, die eine neue
Token-Validierung und Parameter sind. Auch hier bekommen diese ein paar Werte. Zuerst validieren wir den Signaturschlüssel des
Problems. Dies ist auf „true“ eingestellt. Dann ist der
Unterzeichnungsschlüssel des Ausstellers selbst, was ist das noch einmal,
streng geheimer Schlüssel. Also wieder ein neuer symmetrischer
Sicherheitsschlüssel. Und wieder
Systemtexte, die UTF-8 codieren. Dann hol dir Bytes. Hier. Bauen Sie jetzt eine Konfiguration auf. Rufen Sie Abschnittseinstellungen, Token und davon wieder den Wert ab. Alles klar, jetzt validiert die letzten
beiden Probleme. Wir können dies tatsächlich auf
„false“ setzen und
bestätigen auch das Publikum auch falsch. Und wir schließen das
hier, und das war's. Formatiere diese kleine Hoffnung. Und jetzt haben wir unsere
Middleware, im Wesentlichen den Logistikservice oder
nur einen Service, der von
Authentifizierungsdiensten benötigt wird. Also lasst uns
das Ding noch einmal testen. Wiederaufgebaut. Schauen wir uns einfach mal an. Wir
probieren das aus, damit es ausgeführt wird. Und jetzt großartig, wir bekommen
eine nicht autorisierte Bank. Also bedeutet für 01 autorisiert. Auch hier können wir es noch einmal überprüfen. Wenn wir sagen, Executive-off für 01, kriegen
wir diese Tasche. Dies ist die Antwort, keine
Nachricht, nichts dergleichen. Dies ist nur der Statuscode. Wir sind nicht authentifiziert
und nicht berechtigt, dies zu erhalten oder auf
diesen Endpunkt zuzugreifen. Das ist großartig, weil wir damit keinen Header
gesendet haben. Auch hier können wir
einen Blick auf Registerkarte „Netzwerk“ werfen,
die
Sie ausführen würden. Und Sie sehen die Antwort
als Anforderungsheader, nichts mit Authentifizierung
oder Autorisierung. Das
müssen wir als Nächstes tun. Wir müssen
den Authentifizierungsheader auf
unsere Anfragen setzen , auf unseren Anruf. Und dafür müssen wir, gut diesen Vektor
ändern Sie ein bisschen. Also nochmal müssen wir ein paar
Sachen in den Programmen machen, ja. Und wir müssen auch
Middleware hinzufügen, damit dies funktioniert. Und dann können wir
unser JSON-Web-Token mit
Swagger UI und x's,
dem Endpunkt, dem
autorisierten Endpunkt, verwenden unser JSON-Web-Token mit
Swagger UI und x's,
dem Endpunkt, . Also lasst uns das als nächstes machen.
21. Verwenden Sie das JWT mit SwaggerUI & der Authentifizierung Middleware: Zurück zum Programm CS hier
in dieser Zeile X, vaguer Jane, müssen wir noch ein paar Sachen
hinzufügen. Es ist größer. Jen bekommt Optionen. In Bezug auf diese Optionen
sagen wir, dass wir eine
Sicherheitsdefinition hinzufügen möchten. Nennen wir das OAuth2. Legen Sie dann ein neues
Open-API-Sicherheitsschema fest. Lass mich das entfernen. Füge einfach einen weiteren Namespace
hinzu. Und hier drin. Jetzt können wir diesem
Ding eine Beschreibung wie den
Standard-Autorisierungsheader geben , indem das Inhaberschema verwenden,
zum Beispiel Spiel. Das wird dann, wie gesagt, Träger und dann
das eigentliche Token so sein. Dies wäre die Beschreibung. Dann können wir
den Parameter in einstellen. Also wo wollen wir das
einstellen oder hinstellen? Parameterposition
ist der Header. Dann ist der Name aus. Der Typ ist
Sicherheitsschema-Typ, API-Schlüssel und Reihenfolge, um dies festlegen zu können, wir haben zwei Optionen. Betriebsfilter, dann Sicherheitsanforderungen, Betriebsfilter. Und dafür müssen wir ein anderes Paket
installieren,
seinen Betriebsfilter. Installieren Sie hier Paket,
Swash Buckle. Wir hören damit auf. Ich glaube, es wird jetzt installiert. Da ist es. Das war ein bisschen schnell verwegene
ASP NET Core-Filter. Dies ist das Paket, das wir brauchen,
damit wir jetzt noch nicht fertig sind. Wir müssen hier unten auch eine weitere
Middleware hinzufügen. Das wird AB sein, die Verwendung
der Authentifizierung. Es heißt hier, da Microsoft HP
Authentifizierungs-Middleware an
den angegebenen
Application Builder zurückruft , der Authentifizierungsfunktionen ermöglicht. Das ist großartig. Und jetzt lasst uns
das noch einmal laufen. Wir gehen jetzt zuerst hierher zurück, du siehst es hier schon wir
haben einen neuen Button autorisieren. Hier können wir jetzt unser Token
hinzufügen. Uh, loggen wir uns zuerst hier mit Iron Man ein und dann
pfeffern und hinrichten. Wir kopieren das Token. Jetzt können wir dies hier einstellen, Inhaber und dann den
Token-Inhaberraum, und dann das Token, das wir autorisieren
können, schließen. Jetzt versuchen wir
dies auszuführen, klicken Sie auf Executes. Und voila, wir bekommen
unsere Nachricht zurück. Und hier können wir sehen, dass dies
der
Autorisierungsheader ist , den wir gesagt haben. Schauen wir uns einfach
hier auf der Registerkarte „Netzwerk“ an. Drücken Sie erneut auf Ausführen. Wir haben in unseren
Anforderungsheadern gesehen, haben wir Autorisierung, Autorisierungsheader,
Inhaber und dann das Token gesehen. Jetzt funktioniert alles. Wir haben das JSON-Web-Token erstellt, konnten es verwenden und erhalten einen autorisierten Zugriff auf
autorisierte Endpunkte. Großartig. Dies ist im Wesentlichen
das erste große Kapitel, und das nächste Kapitel
ist jetzt das Aktualisierungstoken.
22. Token aktualisieren Einführung: Jetzt hat das schon funktioniert. Das ist perfekt. Die Frage ist jedoch, wenn Sie Ihr
JSON-Web-Token haben, es bald abläuft
oder es könnte sein, dass es einen Angreifer gibt. Und mit diesem Angreifer ist
Ihr JSON-Web-Token
nicht mehr sicher. Dieser Angreifer schnappt sich also Ihr
JSON-Web-Token und verwendet dieses Ding, um sich selbst zu authentifizieren, und das möchten
Sie nicht tun. Deshalb verwenden wir
kürzere Verfallsdaten für unsere JSON-Web-Tokens wie zum Beispiel
15 Minuten. Wenn wir das tun, ein Aktualisierungs-Token,
um ein neues JSON-Web-Token zu erhalten benötigen
wir ein Aktualisierungs-Token,
um ein neues JSON-Web-Token zu erhalten,
da ich sonst,
wenn angrenzend, noch ein
Tokenismus gültig habe. Und Sie als Benutzer möchten
immer noch
eine Webanwendung
mit dem JSON-Web-Token verwenden , das würde nicht funktionieren, aber was Sie dann tun können, und das ist eine Essenz, die Verantwortung
des Front-Ends. Was Sie tun können, ist,
dass Sie ein Aktualisierungstoken verwenden
können , das viel länger gültig ist, z. B. eine
Woche, sieben Tage. Es ist also schwieriger,
dieses Aktualisierungs-Token zu erhalten, daher ist es
für einen Angreifer nicht mehr so einfach. Und wenn Sie
dieses Aktualisierungstoken verwenden, aktualisieren wir dann nicht nur
das JSON-Web-Token, sondern auch das
Aktualisierungstoken selbst. Dann ist also alles neu. Und du als User merkst darüber nichts. Aber du bist immer noch authentifiziert. Autorisiere auch vielleicht ist
alles sicher, oder? Werfen wir einen Blick auf
Refresh-Token als nächstes.
23. Hinzufügen von Daten zum Benutzermodell von Refresh Token: In Ordnung, jetzt ist der
erste Schritt für unser Aktualisierungstoken, dass wir das Aktualisierungstoken
zusammen mit dem
Datum und der Uhrzeit
speichern möchten zusammen mit dem
Datum und der Uhrzeit dieses Token erstellt wurde
und wann es abläuft. Möchten Sie das zusammen
mit
dem Benutzer in der Datenbank speichern . Der erste Schritt besteht also darin, dieses Benutzermodell hier
zu erweitern, wir fügen eine weitere Zeichenfolge hinzu, die das eigentliche
Aktualisierungstoken ist. Dies zu bekommen kann eine
leere Zeichenfolge wie diese sein. Und dann zu einer
Datumszeit eine Eigenschaft. Zuerst wird ein Token
erstellt und das nächste,
tagsüber, dann läuft das Token ab und Sie möchten dieses speichern oder eine weitere Migration
zur Datenbank hinzufügen. Also lasst uns das machen. Wenn Ihre Anwendung ausgeführt wird, stellen
Sie bitte sicher, dass Sie sie beenden. Schließen Sie einfach das Terminal und dann gehen wir zur
Package Manager-Konsole. Wo sind wir? Nun, wir müssen das Verzeichnis
ändern. Okay, und jetzt geben wir Beispiel
Dotnet EF-Migrationen ein, um
Token-Daten zu aktualisieren. Werfen wir einen Blick auf
die Migrationsdatei. Da ist es. Wir sehen, dass
neue Spalten hinzugefügt werden, die als Tabelle verwendet werden können. Und wenn wir
die Migration zurücksetzen, werden sie gelöscht? Das ist also okay. Wir aktualisieren die
Datenbank mit dotnet. Datenbank-Updates. Okay, lasst uns
die Datenbank erneut öffnen. Das Open, und jetzt sehen wir es
schon hier. Wir haben das
Aktualisierungstoken und die Daten. Und hier auch die
Struktur des Tisches. Großartig, also ist das erledigt. Wir haben unsere Aktualisierungstoken-Daten zusammen mit den Benutzerdaten. Und der nächste Schritt besteht
darin, das
Aktualisierungstoken bei Login zu erstellen .
24. Erstellen Sie das Refresh Token bei Login: Um nun auch das Aktualisierungstoken
zurückzugeben ,
müssen wir zuerst die
Autorenantwort
DTO und die
Daten auch hier erweitern . Hier können Sie jetzt
sehen, warum es
sinnvoll ist , diese
Auth Response DTO zu erstellen Wir können
das Erfolgs-Flag nicht nur mit einer Nachricht und
dem JSON-Web-Token senden, wir können auch das Aktualisierungstoken senden und einige Daten zusammen mit diesem
Aktualisierungstoken. Denn dann liegt es in der
Verantwortung des Frontend, zu
entscheiden, wann
dieses Aktualisierungs-Token aktualisiert werden soll. Aber das werden wir
in zukünftigen Lektionen sehen. Fügen wir also zuerst die Eigenschaften hinzu. Das erste, was wiederum ist
das eigentliche Aktualisierungstoken. Standardmäßig
ist dies wiederum eine leere Zeichenfolge. Und jetzt
fügen wir auch das Verfallsdatum hinzu, also läuft das Token ab. Und jetzt ist eine andere Sache, die Sinn
macht und unser Leben erleichtert, das Hinzufügen
eines Aktualisierungstoken-Modells. Wir werden
dies nicht in der Datenbank speichern, wir werden dies nicht zurückgeben. In unserer Logik werden
wir dieses
Aktualisierungstoken-Modell verwenden um die Daten hierher zu legen. Und dann verwenden Sie diese Daten
, um andere Dinge wie das
Festlegen des
Aktualisierungstokens im Cookie zu tun. Lassen Sie uns also
ein anderes Modell erstellen, eine andere Klasse und nennen Sie
dies jetzt Aktualisierungstoken. Hier sagen wir Requisite String. Aktualisierungstoken ist
eine leere Zeichenfolge. Dann sagen wir Datum, Uhrzeit, erstellt es und
nennen wir dieses Token nur. Jetzt läuft auch Datetime ab. Alles klar, jetzt zurück
zum Auth Service. Und hier können wir jetzt
unsere Methode erstellen , um
das Aktualisierungstoken zu erstellen. Auch hier handelt es sich um eine andere
private Methode, ein
privates Refresh-Token. Und es gibt auch
ein Aktualisierungstoken zurück. Sehen Sie sich jetzt an, dass es bereits sinnvoll das
Aktualisierungstoken-Modell hier
zu verwenden. Und dieses Ding jetzt
natürlich ein neues Aktualisierungstoken. Und hier drin sagen wir einfach Token
konvertieren in Basis-64-String, dann
Zufallszahlengenerator-Bytes und dann 64. Und so erstellen wir
unser Aktualisierungstoken. Sie sehen, es ist einfach eine Reihe
von mehreren Zeichen, also nichts Besonderes wie
das JSON Web Token. Dies ist unser Aktualisierungstoken, und hier ist dies
für eine Woche gültig und es wird erstellt. Am Ende geben
wir dieses Aktualisierungstoken zurück. Okay? Wenn wir das bekommen haben, können
wir diese
Methode verwenden, um uns anzumelden. Hier oben in Anmeldemethode nach dem Erstellen
des JSON-Web-Tokens können
wir jetzt sagen, dass unser Aktualisierungstoken ein Aktualisierungstoken erstellt. Stellen Sie dieses Ding natürlich hier ein. Vielleicht können wir
dieses Bit anders formatieren. Wir sagen, das Aktualisierungstoken, das Aktualisierungstoken und das Token läuft ab, Datum ist das Aktualisierungstoken läuft ab. Jetzt speichern wir das und testen
es schnell mit Swagger. Da sind wir. Lasst uns einloggen. Probieren Sie das aus, Mann, Pappa und exekutiert. Und da ist es. Wir haben unser JSON-Web-Token und jetzt auch das Aktualisierungstoken. So sieht dieses Ding zusammen mit dem
Explorationsdatum aus. Perfekt. Und jetzt besteht
der nächste Schritt darin dieses Token
zusammen mit dem Benutzer in der Datenbank zu
speichern und es auch einem Cookie hinzuzufügen. Also lasst uns das als Nächstes machen.
25. Aktualisieren von Token in Cookie & in der Datenbank festlegen: Um nun das
Aktualisierungstoken auf ein Cookie zu setzen, benötigen
wir die Anfrage und das Antwortobjekt diesem gesamten Prozess
hier außerhalb der Web-API. Und um
auf dieses Ding zugreifen zu können, benötigen
wir die
HTTP-Kontext-Übung. Also wollten wir auf
die HTTP-Kontexte zugreifen, würden sie im Controller verwenden. Genau hier. Es wäre
bereits hier verfügbar. Sie haben bereits
den HTTP-Kontext. Und damit können Sie
einfach auf die Antwort zugreifen. Zum Beispiel können Sie
hier Antwort-Header und dann auch
Header anfordern und so weiter. kannst du also schon hier machen. Da wir den Service jedoch hier
nutzen wollen, müssen
wir zuerst die
HTTP-Kontext-Übung injizieren. Also lasst uns das ganz schnell machen. Hier oben im
Konstruktor sagen wir ich habe HTTP-Kontext-Übung. Nennen wir das auch
HTTP-Kontext-Übung. Und wieder erstellen wir diese Felder und einen
Unterstrich hier und hier. Und wir müssen
dieses Ding auch registrieren und das machen wir damit, lasst uns vielleicht zuerst
die Bewerbung beenden. Okay, und jetzt im
Programm CS, hier unten, können
wir einfach
Builder-Services sagen und dann HTTP-Kontext-Übung hinzufügen. Das ist der Richtige. Okay, damit haben
wir unseren
HTTP-Kontext-Accessor und wir haben dieses Ding registriert. Und jetzt können wir
unsere Methode erstellen, um dieses
Token im Cookie und
auch in der Datenbank zu setzen . Also wieder hier unten,
eine andere private Methode, diesmal Async, aber wir geben nichts
Aktualisierungstoken zurück. Und dieses Ding erhält
die tatsächlichen
Aktualisierungs-Token-Objekte und
dann auch den Benutzer. Das brauchen wir also. Und jetzt fangen wir
mit dem Keks an. Und ein Cookie braucht
Cookie-Optionen. Also zuerst die
Cookie-Optionen, neue Cookie-Optionen. Und hier sagen wir, dass dies ein reiner HTTP-Cookie
ist. Dies bedeutet, dass es
nur über die Anfrage, über die Anrufe und nicht
über
JavaScript im Browser zugegriffen werden kann. Das ist wichtig. Und dies ist der einzige Ort
, an dem wir diesen Cookie brauchen. Und wir können auch
die Explorationsphase festlegen , um Token-Ablauf zu aktualisieren. Dies sind bereits
die Cookie-Optionen und jetzt mit
HTTP-Kontexten Übung, und dann könnte es null sein. Hier können wir also auf
die HEB-Kontexte zugreifen. Und von da an haben wir die Antwort
festgelegt. Und hier können wir
auf die Cookies zugreifen. Und hier haben wir gerade gesagt, wir sagen einfach „abhängt“. Der Wert heißt
Aktualisierungstoken. Dann das Aktualisierungstoken. Token, das ist der Wert. Und auch wir geben dieses Ding, die Cookie-Optionen,
und so setzen
wir den Cookie
in unserer Antwort. Das nächste
ist jetzt auch der Benutzer. Das Aktualisierungstoken des Benutzers
wird also so eingestellt, dass das Token-Token
aktualisiert wird. Dann haben wir ein
Benutzer-Token erstellt, bei dem ein Aktualisierungstoken erstellt wird. Das letzte, was das
Benutzer-Token abläuft, ist, dass
das
Aktualisierungstoken abläuft und am Ende sagen wir Wait Kontexte
und dann Änderungen asynchron speichern. Okay? Und wieder verwenden
wir dies jetzt in unserer Login-Methode. Hier oben. Nachdem wir
das Aktualisierungstoken erstellt
haben, sagen wir, dass Sie das Aktualisierungstoken
mit unseren
Aktualisierungstoken-Objekten und dem Benutzer festlegen . Lasst uns das speichern und testen Sie dieses Ding
noch einmal. Alles klar, da
sind wir. Und jetzt öffnen wir die Konsole
schon hier. Da ich Ihnen etwas
auf der Anwendungsregisterkarte
zeigen möchte , sehen
Sie, dass unsere aktuelle Anwendung sieben O acht
lokalisiert ist. Wir sehen, dass wir hier auf die eigentlichen Cookies zugreifen
können,
aber schauen wir uns mal an. der Registerkarte „Netzwerk“
haben wir versucht sich anzumelden. Sagen wir noch einmal mit Iron
Man-Pfeffer, wir drücken Execute. Und du siehst, was wir zurückbekommen. Und jetzt
sehen wir zuerst hier in den Headern, in der Antwort sehen wir dieses
Ding hier, setzen Cookies. Das ist also unser eigentliches Cookie, es wird jetzt als nur
HTTP-Cookie gesetzt. Das Aktualisierungstoken wird
als Nur-HTTP-Cookie festgelegt. Und jetzt finden wir das auch
im Anwendungs-Tab
hier. Da ist es. Machen wir das ein bisschen größer. Vielleicht haben wir
den Wert
Aktualisierungstoken und das
Namen-Aktualisierungstoken. Und jetzt auch hier der Wert. Und das Tolle ist
jetzt, dass
dieses Ding
bei jeder Anfrage automatisch gesendet wird. Wenn
Sie zum Beispiel das hier abrufen möchten, sagen Sie es aus, es wird ausgeführt, gehen Sie zur Registerkarte Netzwerk. Natürlich sind wir nicht autorisiert, aber wir sehen, dass wir in
unserem Anforderungsheader dieses Aktualisierungstoken
senden. Dies ist jetzt wichtig
für die nächsten Schritte , da wir das Aktualisierungstoken
festlegen können. Wenn wir ein Aktualisierungstoken erstellen, legen
wir ein
Aktualisierungstoken im Cookie und auch hier in der Datenbank fest. Jetzt können wir dieses
vollständige Aktualisierungstoken sehen. Jetzt ist der nächste Schritt gut das
Aktualisierungstoken und auch das
JSON-Web-Token zu aktualisieren,
denn das Wichtigste hier beim Aktualisierungstoken
ist, dass sobald ein JSON-Web Token läuft ab oder ein paar Sekunden oder
Minuten bevor dies der Fall ist. Es liegt in der Verantwortung
des Frontend,
andere Endpunkte aufzurufen , die
es dem Benutzer dann ermöglichen, das JWT,
das JSON-Web-Token und
auch das
Aktualisierungstoken zu aktualisieren. Und selbst wenn das
JSON-Web-Token abgelaufen ist, ist
es
mit Hilfe
des Aktualisierungstokens, das länger
gültig ist, nicht mehr des Aktualisierungstokens, das länger
gültig ist, Wir können ein neues
JWT-Token und eine neue
Aktualisierung erstellen Token , damit der Benutzer weiterhin
authentifiziert und autorisiert ist und sich der Benutzer
nicht erneut mit dem
Benutzernamen und dem Passwort authentifizieren muss . Das ist also das Tolle
des Aktualisierungstokens. Dafür brauchen wir
einen anderen Endpunkt, an dem wir das
komplette Paket aktualisieren können. Also lasst uns das als nächstes machen.
26. Aktualisieren Sie das Refresh Token (und das JSON Web Token): Wieder zurück zu Visual Studio. Und in der Schnittstelle
erstellen wir diese neuen Methoden, Task Off Response DTO. Wir nennen das Methanol
auch Aktualisierungstoken. Und es hat keinerlei
Argumente. Ja, wir bauen wieder auf, aber wir werden natürlich einen Pfeil
bekommen, weil dies nicht umgesetzt wird. Aber lasst uns das
jetzt ganz schnell machen. Implementieren Sie die Schnittstelle, während unsere Methoden wahrscheinlich hier unten sind. Ja, lasst uns das aufstellen. Wir haben den registrierten Benutzer. Jetzt lass uns hier runter gehen. Es gibt unsere
Refresh-Token-Methode. Wenn Sie das
Ende der letzten Lektion überspringen, ist
es wichtig, dass das Front-End,
Front-End dieses Ding aufruft. Sobald das JSON-Web-Token abgelaufen
ist oder kurz
davor oder danach. Dann muss das Front-End diesen Endpunkt hier
nennen. Nun, das ist nicht der Endpunkt, dies ist die Service-Methode, aber natürlich wird der
Endpunkt in einer Minute im
Controller
erstellt. Aber jetzt können
wir mit dieser Methode alles auffrischen. Das erste, was wir brauchen, ist das
aktuelle Aktualisierungstoken. Also habe ich Ihnen bereits gesagt, dass
bei jeder Anfrage das Aktualisierungstoken mit
unserer Kontext-Übung,
HTTP-Kontext-Übung, gesendet
wird . Dann die HTTP-Kontexte. Wir können
diesmal auf die Anfrage zugreifen , nicht
auf die Antwort auf die Anfragen, und suchen nach einem
bestimmten Cookie-Wert, und das wäre
das Aktualisierungstoken. Versuchen Sie danach mit dem
Aktualisierungstoken erneut den Benutzer mit
dem Aktualisierungstoken
zu erhalten. Also var user jetzt
kontextiert Waitz Benutzer zuerst
oder standardmäßig asynchron, wobei das Aktualisierungstoken des Benutzers jetzt das Aktualisierungstoken
ist, das angegebene aus dem Cookie. Wenn Sie den Benutzer nicht finden, sagen
wir, geben Sie eine neue
Authentifizierungsantwort mit
der Meth-Nachricht zurück ,
ungültiges Aktualisierungstoken. Und eine andere Option
ist natürlich, wenn Sie einen Benutzer finden, aber das Benutzer-Token abgelaufen ist. Sprechen läuft also
kleiner als eine Datetime. In diesem Fall wir erneut eine neue Auth
Response DTO mit Nachricht zurück. Und dieses Mal kann
die Nachricht einfach ablaufen. In diesem Fall müsste sich der
Benutzer erneut mit
dem Benutzernamen und dem Passwort
authentifizieren. Aber wenn alles gültig ist, haben
wir ein Benutzer-Token,
das immer noch gültig ist. Auch hier erstellen wir ein neues Token. Das ist das
JSON-Web-Token mit unserem Benutzer. Dann erstellen wir ein
neues Aktualisierungstoken. Erstellen Sie ein Aktualisierungstoken. Und setze das Ding auch ein. Stellen Sie das Aktualisierungstoken, das neue
Aktualisierungstoken und den Benutzer ein. Am Ende geben wir wieder
eine neue Autorenantwort zurück, DTO. Mit Erfolg wird wahr. Das Token ist das
Token, Aktualisierungstoken. Neues Aktualisierungstoken, Token. Und wir setzen das Token läuft auf ein neues Aktualisierungstoken ab, das war schon und
das sollte es sein. Wieder ganz schnell, diese Linie
hier ist wirklich wichtig. Wir greifen das Aktualisierungs-Token für den nur
HTTP-Cookie-Wert. Und davon haben wir dieses Mal versucht, den Benutzer zu
finden, nicht mit der Benutzer-ID, sondern mit dem Aktualisierungstoken, da dies
nur für einen bestimmten Benutzer ein Token ist. Und wenn Sie den Benutzer nicht haben,
ist das Aktualisierungstoken ungültig. Wenn das Token
abgelaufen ist, geben
wir eine weitere Nachricht zurück, bei der das Token abgelaufen ist und das
Erfolgs-Flag falsch ist. Andernfalls legen wir wieder
das JSON-Web-Token fest, um
das JSON-Web-Token
ähnlich dem Lock-In zu erstellen , wir erstellen ein neues Aktualisierungstoken
und legen dieses Ding fest und
geben dann das komplette Paket zurück. Okay, jetzt
brauchen wir die Endpunkte. Also an unseren Controller, lasst uns vielleicht hier bearbeiten. Also nochmal, ein
HTTP-Posts mit obwohl ein
GET würde würde, würde auch funktionieren, aber lasst uns
hier einen Beitrag verwenden und Token aktualisieren. Und die Methode jetzt bin ich faul, also kopieren wir dieses Task-Aktionsergebnis
und dann eine Zeichenfolge. Wir nennen das jetzt hier, aktualisieren-Token, keine Argumente. Und wir nennen Aktualisierungstoken
kein Argument, da
das Aktualisierungstoken wieder mit dem Anforderungs-Cookie geliefert wird. Wenn es erfolgreich ist,
geben wir OK Response zurück. Wenn nicht, geben wir
schlechte Anfragen zurück. Nun, ich würde sagen, es ist Zeit, das noch einmal zu testen.
Lass uns die App ausführen. Alles klar, hier sind wir. Ich habe das Cookie hier
von der Registerkarte „Anwendung“ entfernt. Wie Sie sehen können, ist ein
Cookie leer. Wir haben kein Aktualisierungstoken festgelegt und auch die
Registerkarte Netzwerk ist leer. Testen wir das noch einmal. Wir loggen uns ein, probieren das zum
Beispiel mit Iron Man Pepper aus und führen aus. Alles ist in Ordnung. Wir bekommen unser
JSON-Web-Token, das Aktualisierungstoken. Wir sehen es auch hier in
der Anwendung einen Tab. Und jetzt, wenn ich versuche, den
Aktualisierungstoken-Endpunkt hier auszuführen oder
diesen Druck und Ausführen aufzurufen . Das funktioniert, wir bekommen ein
neues Aktualisierungstoken. Sie sehen es hier in
den Wertänderungen. Was passiert jetzt? Übrigens natürlich
in der Datenbank? Wir können uns auch mal ansehen. Lasst uns das einfach auffrischen. Hier sehen wir
genau das gleiche Token. Und jetzt, wenn ich die Neun
hier entferne und wieder auf „Ausführen“ klicke, erhalten
wir die richtige
Fehlermeldung, ungültiges
Aktualisierungstoken, legen es zurück und jetzt funktioniert es. Und was ist mit dem Date? Wir haben dieses neue
Token hier und wir sehen dass Ablauf auf den 16. Mai eingestellt ist. Lassen Sie mich also einfach
das Datum auf meinem Computer ändern. Ändere es,
setze das jetzt auf 20. ein, vielleicht ändere es. Ich habe versucht,
das Token erneut zu aktualisieren. Es heißt, dass Token abgelaufen ist. Okay, großartig, also funktioniert dieser
Endpunkt total. Und wieder liegt dies in der
Verantwortung des Frontend. Ich kann das nicht genug angeben , dass das Frontend oder
der Kunde überprüfen muss. Gibt es angrenzende Web-Token, das abläuft oder bereits abgelaufen ist. In diesem Fall müssen wir
ein Aktualisierungstoken abrufen und Endpunkt
des Aktualisierungstokens aufrufen,
um ein neues Aktualisierungstoken zu erhalten. In Ordnung, und
damit sind wir fertig mit den Aktualisierungstoken und
dem letzten Kapitel jetzt, den Straßen und dem großen
Thema, der Autorisierung.
27. Rollen Einführung: Jetzt sind dies die Endpunkte
für die Registrierung, zum Einloggen, für
das Aktualisierungstoken. Und jetzt
sollte der letzte Teil die Rolle sein. Wir haben unser
Benutzerobjekt in der Datenbank, aber es hat keine Rolle. Aber jetzt wird sich das ändern. Was wir also als Nächstes
tun werden, ist, dass wir die Rolle bei einer neuen Migration
hinzufügen werden . Dieses Feld ist dann in der Datenbank die
Rolle des Benutzers. Und wir werden die Ansprüche auch verwenden , um diese Rolle
im JSON-Web-Token hinzuzufügen. Und wenn der
Benutzer versucht,
einen bestimmten Endpunkt aufzurufen und der Benutzer
für diesen Endpunkt autorisiert werden muss . Dann können wir
das in der Web-API
mit einem anderen Attribut überprüfen . Zum Beispiel haben Sie vielleicht die typische Benutzer
- oder Kundenrolle, aber dann kann
auch eine
Administratorrolle nur die Administratoren bestimmte Endpunkte aufrufen. Das ist es, was
wir als Nächstes überprüfen werden.
28. Rolle zu Benutzermodell hinzufügen: Für unsere Rollen
ist das erste, was
wiederum die Rolle
zum Benutzermodell hinzufügt und eine neue Migration hinzugefügt wird. Hier im Benutzermodell fügen
wir eine neue Eigenschaft hinzu. Dies wäre dann eine
Zeichenfolge einfach mit der Zeile und einer leeren Zeichenfolge. Standardmäßig speichern wir dies und führen jetzt
eine weitere Migration aus. Dotnet EF-Migrationen
verwenden also zum Beispiel Zeile. Okay, jetzt sehen wir dieses Ding hier in unserem
Migrationsordner. Wir fügen einfach eine neue Spalte hinzu. Das ist in Ordnung.
Aktualisieren wir also die Datenbank mit der Dotnet EF-Datenbank. Jetzt schauen wir uns mal an. Hier sind unsere Nutzer. Wir aktualisieren die Daten, wir sehen die neue Zeile hier und können sie natürlich ändern. Zum Beispiel können wir
jetzt sagen, dass der Iran
den Zeilenbenutzer hat , den wir auf Anwenden klicken. Und wenn Sie hier
etwas ändern, stellen Sie sicher, dass Sie im DB-Browser für SQL light hier auf
diese Schaltfläche klicken, oder? Änderungen. Jetzt werden diese Änderungen
geschrieben und gespeichert. Okay, das ist jetzt die neue
Rolle und das Benutzermodell. Und als nächstes fügen wir den
Anspruch der Regel S zum JSON-Web-Token hinzu.
29. Rolle als Anspruch auf den JSON Web Token hinzufügen: Also gehen wir zurück
zum Auth Service und wo wir das Token hier
erstellen, können
wir die
Zeile jetzt einfach als neuen Anspruch hinzufügen. Also fügen wir einfach einen neuen Anspruch und dann
Anspruchstypen hinzu und dann Zeile. Hier schlägt es
schon das Richtige vor, Benutzerzeile, das ist die
Richtige. Das war's schon. Jetzt können wir bereits testen,
ob die aktuelle Rolle
des Benutzers
im JSON-Web-Token verfügbar ist. Werfen wir einen Blick darauf. Es gibt unsere App. Loggen wir uns noch einmal ein. Übrigens, wenn Sie immer noch eingesperrt
sind oder das Aktualisierungstoken in
Ihrem Cookie verfügbar sind, können
Sie
einfach den
Aktualisierungstoken-Endpunkt
hier verwenden einfach den
Aktualisierungstoken-Endpunkt , um das neue
JSON-Web-Token zu erhalten. Das ist
jetzt das Tolle mit Aktualisierungstoken, Sie müssen sich nicht wieder so
einloggen, wie ich es muss, weil ich
alles aus meinen Cookies entfernt habe. In diesem Fall könnten
Sie einfach den Endpunkt des
Aktualisierungstokens verwenden und ein neues
JSON-Web-Token
erhalten. Du siehst einfach rein. Und jetzt sehen wir hier
das JSON-Web-Token. Lasst uns das Ding schnappen. Schau mal hier hin,
wir fügen es wieder ein. Und wir sollten sehen, ja, da ist es, die Rolle jetzt, die der Benutzer ist. Großartig, also funktioniert das schon. Der letzte Schritt
ist bereits, dass wir
diese Zeile für die
Autorisierung verwenden müssen , damit nur bestimmte Benutzer mit einer bestimmten Rolle auf bestimmte Endpunkte
zugreifen können. Also lasst uns das als nächstes machen.
30. Verwenden Sie die Rolle für die Autorisierung: Lassen Sie uns jetzt einfach die
aktuelle Situation nutzen. Wir versuchen hier ein neues
JSON-Web-Token zu bekommen. Das funktioniert jetzt, weil wir
bereits ein Aktualisierungstoken erhalten haben. Auch
hier überprüfen wir dieses Ding und Sie sehen den Rollenbenutzer. Gehe jetzt zu unserem Getc, das
hier aufgerufen wird, und klicke, Probiere es aus. Sie sehen für einen oder Sie sind nicht authentifiziert oder autorisiert. Jetzt fügen wir das
JSON-Web-Token hier hinzu. Hit Execute, wir bekommen
Aloha, du bist autorisiert. Aber was ist, wenn wir
zum Beispiel nur Administratoren
möchten , diesen Endpunkt verwenden. So können
wir zum Beispiel den Rollenadministrator sehr schnell ändern. Der Off-Controller. Hier oben sehen wir, wo es ist Da ist es
nicht hier oben. Hier unten. Wir können einfach Klammern Rho hinzufügen
. Dann zum
Beispiel admin speichern wir das. Starten Sie einfach die Anwendung neu. Jetzt sind wir wieder gesperrt, aber mit Hilfe
unseres Aktualisierungstokens erhalten
wir ein neues JSON-Web-Token, sodass wir uns nicht manuell
anmelden müssen. Lassen Sie uns nochmal autorisieren. Klicken Sie auf Autorisieren, schließen. Jetzt haben wir versucht, dieses
Ding herzukriegen und wir bekommen einen 403. Jetzt 403 Verboten. Das bedeutet also, dass wir einen
Autorisierungsheader senden. Wir haben hier ein
Schlüssel-JSON-Web-Token geschickt, aber mit der falschen Zeile. Jetzt ändern wir unsere Rolle
hier statt Benutzer, wir sagen jetzt admin, es wendet sich an und schreibt die Änderungen. Und jetzt noch einmal,
aktualisieren wir das Token. Alles klar, also lasst uns
das Ding noch einmal kopieren. Wir müssen dieses Token hier verwenden. Jetzt klicken wir auf Autorisieren und jetzt 1 siebtes Aloha,
du bist autorisiert. Großartig. Als Administrator
mit dieser spezifischen Rolle dürfen
wir
diese Informationen hier abrufen oder
auf den Inhalt,
die Informationen dieses
Endpunkts, zugreifen . Das Letzte, was viele Benutzer, fragen
viele Schüler, ist,
was mit mehreren Rollen
ist, wenn Sie
mehr Rods als nur einen autorisieren möchten. Nun, geben Sie einfach den
Benutzer ein und dann Admin. Und das funktioniert auch. Lassen Sie uns die App
manuell neu starten, nur um sicher zu sein. Wenn wir jetzt das
gleiche Token verwenden, klicken wir auf Autorisieren, funktioniert immer noch. Und letzten Test, sagen wir noch einmal, wir möchten diesem
Benutzer die Benutzerzeile geben. Wir schreiben die Änderung. Wieder bekommen wir ein neues Token. Dies ist jetzt das
Benutzer-Token, das Sie hier sehen. Dies ist jetzt ein Benutzer. Und wir klicken Authorize a logout, Berra, schließen, ausführen, und wir bekommen immer noch
anders, du bist autorisiert. So funktionieren die Straßen jetzt. Und damit sind wir mit dieser Klasse
fertig. Herzlichen Glückwunsch.
31. Abschließende Worte: Ordnung, und das
war's schon in kurzer Zeit
haben Sie gelernt, Benutzer zu registrieren, zu sperren und
JSON-Web-Token zu erstellen. Verwenden Sie auch Aktualisierungstoken und Sie haben diesem Benutzer
Rollen hinzugefügt. Jetzt denke ich, dass Sie bereits alle Grundlagen
für einen
Authentifizierungsprozess mit dotnet sechs
kennen , ich habe wirklich gehofft, dass Sie etwas
lernen und es war nützlich für Sie. Wenn ja, würde ich gerne eine Rezension sehen. Vielen Dank dafür. Und vielleicht
möchten Sie tiefer in Dotnet und Blazer und andere Mitarbeiter in Bezug auf die
Webentwicklung eintauchen. Und in diesem Fall
würde ich dich gerne auf meinem YouTube-Kanal sehen . Also nochmals vielen
Dank für Ihre Zeit und vielen Dank, dass Sie
an meinem Kurs teilgenommen haben. Und ich hoffe, Sie im nächsten Kurs oder auf
meinem YouTube-Kanal zu sehen. Kümmere dich.