Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Rick Anderson und Swiss-Devs
Warnung
Zweistufige Authentifizierungs-Apps (2FA) mit einem zeitbasierten Einmalkennwortalgorithmus (TOTP) sind der branchenspezifische Ansatz für 2FA. 2FA mit TOTP wird gegenüber SMS 2FA bevorzugt. Weitere Informationen finden Sie unter Aktivieren der QR-Code-Generierung für TOTP-Authentifikator-Apps in ASP.NET Core für ASP.NET Core 2.0 oder höher.
In diesem Lernprogramm wird gezeigt, wie Sie die zweistufige Authentifizierung (2FA) mithilfe von SMS einrichten. Es liegen Anweisungen vor für twilio und ASPSMS (https://www.aspsms.com/asp.net/identity/core/testcredits/
), aber Sie können auch jeden anderen SMS-Anbieter verwenden. Es wird empfohlen, die Kontobestätigung und die Kennwortwiederherstellung abzuschließen, bevor Sie dieses Lernprogramm starten.
Anzeigen oder Herunterladen von Beispielcode Herunterladen.
Erstellen eines neuen ASP.NET Core-Projekts
Erstellen Sie eine neue ASP.NET Core-Web-App mit individuellen Konten namens Web2FA
. Befolgen Sie die Anweisungen unter Erzwingen von HTTPS in ASP.NET Core , um HTTPS einzurichten und zu erfordern.
Erstellen eines SMS-Kontos
Erstellen Sie ein SMS-Konto, z. B. von twilio oder ASPSMS (https://www.aspsms.com/asp.net/identity/core/testcredits/
). Notieren Sie die Authentifizierungsanmeldeinformationen (für twilio: accountSid und authToken, für ASPSMS: Userkey und Password).
Ermitteln der Anmeldeinformationen des SMS-Anbieters
Twilio:
Kopieren Sie auf der Registerkarte "Dashboard" Ihres Twilio-Kontos die Konto-SID und das Authentifizierungstoken.
ASPSMS:
Navigieren Sie in Ihren Kontoeinstellungen zu Userkey , und kopieren Sie ihn zusammen mit Ihrem Kennwort.
Diese Werte werden später mit dem Tool Secret-Manager unter den Schlüsseln SMSAccountIdentification
und SMSAccountPassword
gespeichert.
Angeben der SenderID/Absender
Twilio: Kopieren Sie die Twilio-Telefonnummer aus dem Tab "Nummern".
ASPSMS: Im Menü "Zum Entsperren von Absendern" entsperren Sie einen oder mehrere Absender oder wählen Sie einen alphanumerischen Absender aus (wird nicht von allen Netzwerken unterstützt).
Später werden wir diesen Wert mit dem Tool für den geheimen Manager im Schlüssel SMSAccountFrom
speichern.
Bereitstellen von Anmeldeinformationen für den SMS-Dienst
Wir verwenden das Optionsmuster , um auf das Benutzerkonto und die Schlüsseleinstellungen zuzugreifen.
- Erstellen Sie eine Klasse zum Abrufen des sicheren SMS-Schlüssels. Für dieses Beispiel wird die
SMSoptions
Klasse in derServices/SMSoptions.cs
Datei erstellt.
namespace Web2FA.Services
{
public class SMSoptions
{
public string SMSAccountIdentification { get; set; }
public string SMSAccountPassword { get; set; }
public string SMSAccountFrom { get; set; }
}
}
Legen Sie SMSAccountIdentification
, SMSAccountPassword
und SMSAccountFrom
mit dem Secret-Manager-Tool fest. Beispiel:
C:/Web2FA/src/WebApp1>dotnet user-secrets set SMSAccountIdentification 12345
info: Successfully saved SMSAccountIdentification = 12345 to the secret store.
- Fügen Sie das NuGet-Paket für den SMS-Anbieter hinzu. Führen Sie in der Paket-Manager-Konsole (PMC) Folgendes aus:
Twilio:
Install-Package Twilio
ASPSMS:
Install-Package ASPSMS
- Fügen Sie Code in der
Services/MessageServices.cs
Datei hinzu, um SMS zu aktivieren. Verwenden Sie entweder den Abschnitt "Twilio" oder "ASPSMS":
Twilio:
using Microsoft.Extensions.Options;
using System.Threading.Tasks;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;
namespace Web2FA.Services
{
// This class is used by the application to send Email and SMS
// when you turn on two-factor authentication in ASP.NET Identity.
// For more details see this link https://go.microsoft.com/fwlink/?LinkID=532713
public class AuthMessageSender : IEmailSender, ISmsSender
{
public AuthMessageSender(IOptions<SMSoptions> optionsAccessor)
{
Options = optionsAccessor.Value;
}
public SMSoptions Options { get; } // set only via Secret Manager
public Task SendEmailAsync(string email, string subject, string message)
{
// Plug in your email service here to send an email.
return Task.FromResult(0);
}
public Task SendSmsAsync(string number, string message)
{
// Plug in your SMS service here to send a text message.
// Your Account SID from twilio.com/console
var accountSid = Options.SMSAccountIdentification;
// Your Auth Token from twilio.com/console
var authToken = Options.SMSAccountPassword;
TwilioClient.Init(accountSid, authToken);
return MessageResource.CreateAsync(
to: new PhoneNumber(number),
from: new PhoneNumber(Options.SMSAccountFrom),
body: message);
}
}
}
ASPSMS:
using Microsoft.Extensions.Options;
using System.Threading.Tasks;
namespace Web2FA.Services
{
// This class is used by the application to send Email and SMS
// when you turn on two-factor authentication in ASP.NET Identity.
// For more details see this link https://go.microsoft.com/fwlink/?LinkID=532713
public class AuthMessageSender : IEmailSender, ISmsSender
{
public AuthMessageSender(IOptions<SMSoptions> optionsAccessor)
{
Options = optionsAccessor.Value;
}
public SMSoptions Options { get; } // set only via Secret Manager
public Task SendEmailAsync(string email, string subject, string message)
{
// Plug in your email service here to send an email.
return Task.FromResult(0);
}
public Task SendSmsAsync(string number, string message)
{
ASPSMS.SMS SMSSender = new ASPSMS.SMS();
SMSSender.Userkey = Options.SMSAccountIdentification;
SMSSender.Password = Options.SMSAccountPassword;
SMSSender.Originator = Options.SMSAccountFrom;
SMSSender.AddRecipient(number);
SMSSender.MessageData = message;
SMSSender.SendTextSMS();
return Task.FromResult(0);
}
}
}
Startvorgang konfigurieren, um SMSoptions
zu verwenden
Fügen Sie SMSoptions
dem Dienstcontainer in der ConfigureServices
-Methode in Startup.cs
hinzu.
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
services.Configure<SMSoptions>(Configuration);
}
Aktivieren der zweistufigen Authentifizierung
Öffnen Sie die Views/Manage/Index.cshtml
Razor-Ansichtsdatei, und entfernen Sie die Kommentarzeichen, sodass kein Markup auskommentiert ist.
Anmelden mit zweistufiger Authentifizierung
- Führen Sie die App aus, und registrieren Sie einen neuen Benutzer.
- Tippen Sie auf Ihren Benutzernamen, wodurch die
Index
Aktionsmethode im Controller verwalten aktiviert wird. Tippen Sie dann auf den Link hinzufügen bei der Telefonnummer.
- Fügen Sie eine Telefonnummer hinzu, die den Überprüfungscode erhält, und tippen Sie auf "Überprüfungscode senden".
- Sie erhalten eine Sms mit dem Überprüfungscode. Geben Sie sie ein, und tippen Sie auf 'Absenden'.
Wenn Sie keine Sms erhalten, wird die Seite "twilio log" angezeigt.
- In der Ansicht "Verwalten" wird angezeigt, dass Ihre Telefonnummer erfolgreich hinzugefügt wurde.
- Tippen Sie auf "Aktivieren ", um die zweistufige Authentifizierung zu aktivieren.
Testen der zweistufigen Authentifizierung
Ausloggen.
Anmelden.
Das Benutzerkonto hat die zweistufige Authentifizierung aktiviert, sodass Sie den zweiten Authentifizierungsfaktor bereitstellen müssen. In diesem Lernprogramm haben Sie die Telefonüberprüfung aktiviert. Mit den integrierten Vorlagen können Sie auch E-Mails als zweiten Faktor einrichten. Sie können zusätzliche zweite Faktoren für die Authentifizierung wie QR-Codes einrichten. Tippen Sie auf Senden.
Geben Sie den Code ein, den Sie in der SMS-Nachricht erhalten.
Wenn Sie auf das Kontrollkästchen " Diesen Browser speichern " klicken, müssen Sie sich nicht mit 2FA anmelden, wenn Sie dasselbe Gerät und denselben Browser verwenden. Wenn Sie 2FA aktivieren und auf " Diesen Browser speichern" klicken, erhalten Sie starken 2FA-Schutz vor böswilligen Benutzern, die versuchen, auf Ihr Konto zuzugreifen, sofern sie keinen Zugriff auf Ihr Gerät haben. Sie können diese Einstellung auf jedem privaten Gerät vornehmen, das Sie regelmäßig verwenden. Wenn Sie die Einstellung Diesen Browser merken aktivieren, profitieren Sie von der zusätzlichen Sicherheit durch Zwei-Faktor-Authentifizierung auf Geräten, die Sie nicht regelmäßig verwenden, und genießen die Bequemlichkeit, auf Ihren eigenen Geräten keine Zwei-Faktor-Authentifizierung durchführen zu müssen.
Kontosperrung zum Schutz vor Brute-Force-Angriffen
Die Kontosperrung wird mit 2FA empfohlen. Sobald sich ein Benutzer über ein lokales Konto oder ein soziales Konto anmeldet, wird jeder fehlgeschlagene Versuch bei 2FA gespeichert. Wenn die maximal fehlgeschlagenen Zugriffsversuche erreicht sind, wird der Benutzer gesperrt (Standard: 5 Minuten Sperrung nach 5 fehlgeschlagenen Zugriffsversuchen). Eine erfolgreiche Authentifizierung setzt die Anzahl der fehlgeschlagenen Zugriffsversuche zurück und setzt die Uhr zurück. Die maximalen fehlgeschlagenen Zugriffsversuche und die Sperrzeit können mit MaxFailedAccessAttempts und DefaultLockoutTimeSpan festgelegt werden. Im Folgenden wird die Kontosperre für 10 Minuten nach 10 fehlgeschlagenen Zugriffsversuchen konfiguriert:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
services.Configure<IdentityOptions>(options =>
{
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
});
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
services.Configure<SMSoptions>(Configuration);
}
Bestätigen Sie, dass PasswordSignInAsynclockoutOnFailure
auf true
setzt:
var result = await _signInManager.PasswordSignInAsync(
Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);