In diesem Artikel wird die Zwei-Faktor-Authentifizierung im Detail erläutert und wie diese in .NET 5 unter Verwendung von Identitäts-Frameworks wie IdentityServer4 und einem SMS-Anbieter (Twilio) implementiert werden kann.
{{LINE_11}} Es enthält die folgenden Abschnitte:
- Was ist die Zwei-Faktor-Authentifizierung?
- Wie funktioniert 2FA?
- 2FA- und Multi-Faktor-Authentifizierung
- Nachteile der Verwendung von 2FA
- Implementieren von 2FA in .NET5 Lassen Sie uns zunächst verstehen, was 2FA ist und warum es ein wesentlicher Bestandteil jeder modernen Webanwendung sein muss.
Was ist eine Zwei-Faktor-Authentifizierung?
Ein Faktor in diesem Zusammenhang impliziert eine Möglichkeit, eine App oder einen Dienst davon zu überzeugen, dass Sie der Eigentümer des Kontos sind. Benutzername/Kennwort wird häufig als der häufigste Authentifizierungsfaktor verwendet. Aufgrund vieler Sicherheitsprobleme im Zusammenhang mit der IT und den jüngsten weit verbreiteten Datenverletzungen ist die Einzelfaktorauthentifizierung weniger sicher geworden. Die Zwei-Faktor-Authentifizierung ist eine zusätzliche Sicherheitsebene, die vor dem Zugriff auf Ihr Konto spielt. Einbeziehung zum Standard-Anmeldungsprozess-Es wird ein zusätzlicher Schritt eingeführt, um die Benutzeridentität durch Senden eines Codes (an Ihre E-Mail oder als Textnachricht) zu überprüfen. Auf diese Weise wird Ihre Identität bewiesen und nur dann wird der Zugang gewährt.
Wie funktioniert 2FA?
In 2FA ist das Passwort immer noch Ihr erster Authentifizierungsfaktor. Wenn Sie sich also bei Ihrem Konto anmelden, werden Sie zu einer anderen Seite umgeleitet, auf der Sie das Konto des Kontos überprüfen müssen. Dies kann auf verschiedene Arten erfolgen:
- Die Anwendung sendet einen Bestätigungscode, der häufig OTP (einmalige Passwörter) an Ihre E-Mail-Adresse bezeichnet wird.
- Code wird als Textnachricht auf Ihrem Telefon geliefert.
- Sie installieren eine Authenticator -App auf Mobilgeräten, über die Sie Anmeldeanforderungen autorisieren können. HINWEIS: Diese Verifizierungscodes werden zufällig erzeugt und nach Verwendung abgelaufen. Außerdem sind sie von kurzer Dauer. Es gibt also ein kurzes Fenster, bevor Sie den Code verwenden können (dies verhindert, dass der Hacker die Bestätigungscodes brutal erzwingt).
Können wir 2FA als Multi-Faktor-Authentifizierung bezeichnen?
Authentifizierungsmethoden sind nicht auf Zwei-Faktor beschränkt. Viele Apps und Dienste bewegen ihre Benutzer über 2FA hinaus und verwenden Multi-Faktor-Authentifizierung. 2FA und MFA (Multi-Faktor-Authentifizierung) werden häufig synonym verwendet. Es gibt jedoch einen Unterschied. In der Multi-Faktor-Authentifizierung werden zwei oder mehr Faktoren verwendet. Es kann die IP-Adresse, die GEO-Standort- und Geräteinformationen eines Benutzers auf andere Faktoren wie ein Passwort und OTP überprüfen, um die Identität des Benutzers zu überprüfen. Daher können wir sagen, dass der 2FA eine Teilmenge von MFA ist. In 2FA gibt es nur zwei Faktoren, während Multi-Faktor zwei oder mehr Faktoren verwenden kann. MFA erschwert es Hackern, da es im traditionellen Authentifizierungsprozess mehrere Sicherheitsebenen hinzufügt.
Gibt es Nachteile mit 2FA?
Ähnlich wie viele „Sicherheits- und Privatsphäre“ -Lösungen, die in modernen Apps existieren. Es ist auch mit einem Preis verbunden - Unannehmlichkeiten, da ein zusätzlicher Schritt beteiligt ist, der zu Reibung in der Benutzererfahrung führt. Es wird jedoch von vielen Apps und Dienstleistungen übernommen, sodass dieser Kompromiss akzeptabel wird.
Wie kann ich die 2FA -Authentifizierung implementieren?
In diesem Abschnitt lernen wir, wie 2FA in .NET5 mit IdentityServer4 und Twilio implementiert werden kann. Erstellen wir also ein Testkonto auf Twilio:
- Anmelden anmelden
- Überprüfen Sie Ihr Konto, indem Sie eine gültige Telefonnummer bereitstellen. Sobald Ihr Konto überprüft wurde, können Sie das Konsolen -Dashboard verwenden.
- Kopieren Sie Ihr Konto Sid und Auth Token aus dem Dashboard.
- Navigieren Sie zum Kauf einer Nummer, die Sie zum Senden von SMS/ verwenden werden/ Hinweis: Twilio gibt 15 $ Credit auf allen Testkonten, mit denen Sie die Telefonnummer kaufen.
Sie können eine beliebige Zahl auswählen, solange es „SMS -Funktionen“ unterstützt. (Beachten Sie Ihre Telefonnummer, mit der wir später in unserem Projekt konfigurieren werden.) 5. Mit Twilio können Sie mithilfe von Testkonto SMS an eine verifizierte Anrufer -IDs senden, die Sie mit dem folgenden Link verwalten können: Dies ist alles, was Sie mithilfe von Twilio Dashboard konfigurieren müssen. Erstellen wir eine ASP.NET -Kern -Web -App (wählen Sie die Projektvorlage wie unten und Target .NET5.
Wir werden jetzt IdentityServer4, Twilio -Pakete von Nuget integrieren.
Install -Package IdentityServer4 -version 4.1.1
Installpackage Twilio -Version 5.55.0
IdentityServer4 Quick UI ist verfügbar unter: Sie können es in Ihr Projekt aufnehmen, indem Sie den folgenden Befehl in Entwickler Shell ausführen:iex ((New-Object System.net.Webclient) .Downloadstring ('https://raw.githubuSercontent.com/identityserver/idallityServer4.quickstart.ui/main/getmain.ps1'))
`` Wenn es richtig installiert würde, sehen Sie den QuickStart -Ordner in Ihrem Projekt:
Lassen Sie uns dieses Projekt erstellen und durchführen. Sie sollten in der Lage sein, die Begrüßungsseite wie unten gezeigt zu sehen:
Diese Vorlage verwendet In-Memory-Datenspeicher, sodass Sie Ihre Testbenutzer in config.cs-Datei hinzufügen können
Öffnen Sie Startup.cs und fügen Sie die folgenden IdentityServer4 -Dienste in der Konfigurationsservices -Methode hinzu:
services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddTestUsers(Config.GetUsers())
.AddInMemoryClients(Config.GetClients())
.AddDeveloperSigningCredential();
Fügen Sie nun IdentityServer in Anforderungspipeline hinzu:
app.UseIdentityServer();
Führen Sie das Projekt aus und navigieren Sie zu _/Konto/Login _
Melden Sie sich mit den Anmeldeinformationen an, wie in config.cs hinzugefügt Sobald IdentityServer konfiguriert ist und ausgeführt wird. Wir können dann mit Twilio Unterstützung für 2FA hinzufügen. Fügen wir die folgende Klasse hinzu:
public class TwilioSettings
{
public string Sid { get; set; }
public string Token { get; set; }
public string From { get; set; }
}
Diese Konfigurationsklasse wird verwendet, um Einstellungen mithilfe der Abhängigkeitsinjektion zu injizieren.
- Rechtsklick im Projekt und fügen Sie die Benutzergeheimnisse mit Twilio -Konfiguration hinzu (SID, Token, PhonNumber)
- Einstellungen in die KonfigurationService -Methode von startup.cs einlegen
var twilioSettings = Configuration.GetSection("TwilioSettings");
services.Configure<TwilioSettings>(twilioSettings);
Startup.cs wurde konfiguriert. Wir können nun zum Hinzufügen eines neuen Dienstes namens AuthMessagesender übergehen, der für das Senden von SMS mit Twilio verantwortlich ist. Lassen Sie uns eine Schnittstelle erstellen, die AuthMessagesender implementiert.
public interface ISmsSender
{
Task SendSmsAsync(string number, string message);
}
Wir werden dies in Startup.cs injizieren.
services.AddTransient <ISmsSender, AuthMessageSender>();
Der SMS -Sendecode ist ziemlich einfach. Wir erstellen einfach einen Twilio -Client und rufen Messageresource.Createasync -Methode zum Senden von SMS auf.
public Task SendSmsAsync(string number, string message)
{
var sid = _twilioSettings.Value.Sid;
var token = _twilioSettings.Value.Token;
var from = _twilioSettings.Value.From;
TwilioClient.Init(sid, token);
MessageResource.CreateAsync(new PhoneNumber(number),
from: new PhoneNumber(from),
body: message);
return Task.FromResult(0);
}
Wir werden die Anmeldemethode ändern, um zu überprüfen, ob der Benutzer 2FA aktiviert hat, damit wir sie für die Codeüberprüfung umleiten können. Fügen Sie in QuickStart/Ansichten verififyCode.cshtml hinzu:
Ändern Sie die Konto-/Anmeldemethode, um den Verifizierungscode nach Überprüfung von Anmeldeinformationen zu generieren und zu senden. Wir möchten das Anmeldung in diesem Moment nicht in der Anfrage abschließen. Daher wird der Aufruf von httpcontext.Signinasync-Methoden entfernt. Stattdessen generieren wir einfach einen zufälligen Verifizierungscode und speichern ihn (derzeit verwenden wir In-Memory-Store für Demonstrationszwecke).
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
Und dann werden wir den Benutzer auf die Seite “verifizieren In der Aktion verifizieren
Wenn der Code übereinstimmt, schließen wir einfach die Authentifizierungsanforderung durch, indem wir die SigninaSync -Methode aufrufen und den Benutzer auf die autorisierte Seite umleiten. Lassen Sie uns das Projekt ausführen Schritt -1: Der Benutzer bietet Anmeldeinformationen an.
Schritt-2: Anmeldeinformationen werden verifiziert und ein Verifizierungscode gesendet:
Schritt 3: Benutzer überprüft den richtigen Code.
Step-4-Code wird verifiziert und die 2FA-Authentifizierung wurde abgeschlossen.
Abschluss:
In diesem Artikel haben wir mit IdentityServer4 und Twilio von 2FA und seiner Implementierung in .NET5 erfahren. Sie können den in diesem Artikel verwendeten Beispielcode aus diesem Repo herunterladen. Die Verwendung von SMS für 2FA stärkt Ihre Sicherheit sicher, ist jedoch immer noch anfällig für SIM -Swap -Angriffe. Daher ermutigen Sicherheitsforscher 2FA, andere Ansätze wie Authenticator -Apps und Sicherheitsschlüssel (Yubikey) zu verwenden, die nicht in das Telefonnetzwerk abgefangen werden können. In einem kommenden Artikel werden wir mehr darüber erfahren - bleiben Sie dran!