Authentifizierung und Autorisierung in . NET 6 mit JSON Web Token (JWT), Markierungen & Rollen aktualisieren | Patrick God | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Authentifizierung und Autorisierung in . NET 6 mit JSON Web Token (JWT), Markierungen & Rollen aktualisieren

teacher avatar Patrick God, Teaching code in a simple and fun way.

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      1:34

    • 2.

      Kursübersicht

      1:31

    • 3.

      Erstellen des Projekts

      1:39

    • 4.

      Hinzufügen des Benutzermodells

      3:31

    • 5.

      Hinzufügen des Authentication

      3:36

    • 6.

      Erster Test mit SwaggerUI

      1:32

    • 7.

      Hinzufügen des Authentifizierungsdienstes

      2:24

    • 8.

      Injizieren des Dienstes (Dependency

      1:46

    • 9.

      GitHub Repo

      0:54

    • 10.

      Kennwort Hash erstellen

      6:32

    • 11.

      DataContext & Entity Framework Core hinzufügen

      3:36

    • 12.

      EF Core Tools installieren

      1:31

    • 13.

      Code Erste Migrationen verwenden

      4:46

    • 14.

      Öffnen der Datenbank mit dem DB für SQLite

      0:56

    • 15.

      Benutzer in der Datenbank speichern

      1:51

    • 16.

      AuthResponseDto hinzufügen

      3:13

    • 17.

      Passwort überprüfen

      2:07

    • 18.

      Implementieren der Anmeldemethode

      6:41

    • 19.

      Erstellen und zurückgeben eines JSON Web Token

      11:59

    • 20.

      Fügen Sie einen gesicherten Endpunkt für autorisierte Benutzer hinzu

      6:53

    • 21.

      Verwenden des JWT mit SwaggerUI und der Authentication

      4:21

    • 22.

      Token aktualisieren Einführung

      1:34

    • 23.

      Hinzufügen von Refresh zum Benutzermodell

      2:13

    • 24.

      Erstellen des Refresh Token in Login

      4:50

    • 25.

      Setzen von Refresh in Cookie & in der Datenbank

      7:21

    • 26.

      Aktualisieren des Token (und des JSON Web Token)

      8:16

    • 27.

      Rolleneinführung

      0:56

    • 28.

      Rolle zu Benutzermodell hinzufügen

      1:32

    • 29.

      Rolle als Anspruch in das JSON Web Token hinzufügen

      1:55

    • 30.

      Verwende die Rolle für die Autorisierung

      3:40

    • 31.

      Schlussworte

      0:48

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

396

Teilnehmer:innen

2

Projekte

Über diesen Kurs

Willkommen zur "Authentifizierung & Autorisierung in . NET 6" Kurs .

In diesem Kurs lernst du, wie du dich in diesem Kurs einstellen kannst

  • Erstellen eines ASP.NET Web API
  • Benutzer anmelden und mit ihrem Benutzernamen und Passwort einloggen
  • diese Benutzer in einer SQLite-Datenbank speichern
  • Entity Framework Core code-first verwenden
  • JSON Web Tokens (JWT) erstellen, um einen Benutzer zu authentifizieren
  • Erstellen von Refresh Token
  • Autorisieren eines Benutzers mit Rollen

All das lernen Sie in einem einzigen Projekt mit . NET 6 und Visual Studio 2022.

Ein wenig Erfahrung mit C#, . NET, und das Erstellen von Web-APIs ist definitiv ein Vorteil.

Ich hoffe, du bist bereit! Beginnen wir.

Triff deine:n Kursleiter:in

Teacher Profile Image

Patrick God

Teaching code in a simple and fun way.

Kursleiter:in

Hey friends, I'm Patrick.

Writing code is what drives me.

Creating software out of nothing is a skill I truly am passionate about and I want to share this astonishing feeling of making stuff with you.

I started to learn several programming languages as a teenager and always wanted to create software ever since I first played a game on a Commodore 64.

During my bachelor's and master's studies, I joined various companies, made desktop and web applications as well as video games professionally, and was always anxious to improve my craft, which I have been doing for more than 15 years now.​

For me, the most important part of writing and teaching code is to have fun.

If certain ways work for you and the results are maintainable and you have fun... Vollständiges Profil ansehen

Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

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.