Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Od Rick Anderson a Swiss-Devs
Varování
Dvoufaktorové autentizační aplikace (2FA) používající algoritmus jednorázového hesla založeného na čase (TOTP) jsou doporučovaným přístupem pro 2FA. 2FA využívající TOTP je preferováno před SMS 2FA. Další informace najdete v tématu Povolení generování kódu QR pro ověřovací aplikace TOTP v ASP.NET Core pro ASP.NET Core 2.0 nebo novější.
V tomto kurzu se dozvíte, jak nastavit dvojúrovňové ověřování (2FA) pomocí SMS. Pokyny jsou uvedeny pro twilio a ASPSMS (https://www.aspsms.com/asp.net/identity/core/testcredits/
), ale můžete použít libovolného jiného poskytovatele serveru SMS. Před zahájením tohoto kurzu doporučujeme dokončit potvrzení účtu a obnovení hesla.
Zobrazit nebo stáhnout vzorový kód. Jak stáhnout.
Vytvoření nového projektu ASP.NET Core
Vytvořte novou webovou aplikaci ASP.NET Core pojmenovanou Web2FA
s jednotlivými účty. Postupujte podle pokynů v Vynucení HTTPS v ASP.NET Core pro nastavení a požadavkování HTTPS.
Vytvoření účtu SMS
Vytvořte účet SMS, například z twilio nebo ASPSMS (https://www.aspsms.com/asp.net/identity/core/testcredits/
). Poznamenejte si přihlašovací údaje pro ověřování (pro twilio: accountSid a authToken, pro ASPSMS: Userkey a Password).
Zjištění přihlašovacích údajů poskytovatele serveru SMS
Twilio:
Na záložce Řídicí panel ve vašem účtu Twilio zkopírujte ID účtu SID a ověřovací token .
ASPSMS:
V nastavení účtu přejděte na uživatelský klíč a zkopírujte jej společně s heslem .
Později tyto hodnoty uložíme pomocí nástroje secret-manager v rámci klíčů SMSAccountIdentification
a SMSAccountPassword
.
Určení ID odesílatele / původce
Twilio: Na kartě Čísla zkopírujte své Twilio telefonní číslo.
ASPSMS: V nabídce Odemykání původců odemkněte jeden nebo více původců nebo zvolte alfanumerický původce (nepodporuje se ve všech sítích).
Později tuto hodnotu uložíme pomocí nástroje secret-manager v rámci klíče SMSAccountFrom
.
Zadání přihlašovacích údajů pro službu SMS
K přístupu k uživatelskému účtu a klíčovým nastavením použijeme vzorec Možnosti.
- Vytvořte třídu pro získání zabezpečeného SMS klíče. Pro tuto ukázku se v souboru
SMSoptions
vytvoří třídaServices/SMSoptions.cs
.
namespace Web2FA.Services
{
public class SMSoptions
{
public string SMSAccountIdentification { get; set; }
public string SMSAccountPassword { get; set; }
public string SMSAccountFrom { get; set; }
}
}
Nastavte SMSAccountIdentification
, SMSAccountPassword
a SMSAccountFrom
pomocí nástroje secret-manager. Například:
C:/Web2FA/src/WebApp1>dotnet user-secrets set SMSAccountIdentification 12345
info: Successfully saved SMSAccountIdentification = 12345 to the secret store.
- Přidejte balíček NuGet pro poskytovatele serveru SMS. Z konzoly Správce balíčků (PMC) spusťte:
Twilio:
Install-Package Twilio
ASPSMS:
Install-Package ASPSMS
- Přidejte do souboru
Services/MessageServices.cs
kód, který povolí SMS. Použijte buď sekci Twilio nebo 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);
}
}
}
Nastavte spuštění pro použití SMSoptions
Do kontejneru služby v metodě SMSoptions
v ConfigureServices
přidejte Startup.cs
:
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
services.Configure<SMSoptions>(Configuration);
}
Povolení dvoufaktorového ověřování
Otevřete soubor zobrazení Views/Manage/Index.cshtml
Razor a odeberte znaky komentáře (tak, aby žádná část značkování nebyla komentována).
Přihlášení pomocí dvojúrovňového ověřování
- Spuštění aplikace a registrace nového uživatele
- Klepněte na své uživatelské jméno, které aktivuje metodu akce
Index
v kontroleru Spravovat. Potom klepněte na telefonní číslo Přidat odkaz.
- Přidejte telefonní číslo, které obdrží ověřovací kód, a klepněte na Odeslat ověřovací kód.
- Zobrazí se textová zpráva s ověřovacím kódem. Zadejte ho a klepněte na Odeslat
Pokud se vám nezobrazí textová zpráva, podívejte se na stránku protokolu twilio.
- Zobrazení Spravovat ukazuje, že vaše telefonní číslo bylo úspěšně přidáno.
- Klepnutím na Povolit aktivujte dvoufaktorové ověřování.
Testování dvojúrovňového ověřování
Odhlaste se.
Přihlásit se.
Uživatelský účet povolil dvojúrovňové ověřování, takže musíte zadat druhý faktor ověřování. V tomto kurzu jste povolili ověření telefonu. Integrované šablony také umožňují nastavit e-mail jako druhý faktor. Můžete nastavit další faktory pro ověřování, jako jsou kódy QR. Klepněte na Odeslat.
Zadejte kód, který dostanete ve zprávě SMS.
Klikněte na zaškrtávací políčko Pamatovat si tento prohlížeč, čímž se osvobodíte od potřeby použít dvoufázové ověření (2FA) při přihlašování na stejném zařízení a prohlížeči. Povolení 2FA a kliknutí na Pamatovat si tento prohlížeč vám poskytne silnou ochranu 2FA před škodlivými uživateli, kteří se pokoušejí získat přístup k vašemu účtu, pokud nemají přístup k vašemu zařízení. Můžete to udělat na jakémkoli privátním zařízení, které pravidelně používáte. Nastavením Pamatovat si tento prohlížečzískáte lepší zabezpečení pomocí 2FA na zařízeních, která nepoužíváte pravidelně, a pohodlí spočívající v tom, že na vlastních zařízeních nemusíte 2FA procházet.
Uzamčení účtu pro ochranu před útoky hrubou silou
U 2FA se doporučuje uzamčení účtu. Jakmile se uživatel přihlásí přes místní účet nebo účet sociální sítě, uloží se každý neúspěšný pokus o 2FA. Pokud dojde k dosažení maximálního počtu neúspěšných pokusů o přístup, je uživatel uzamčen (výchozí hodnota: 5 minut uzamčení po 5 neúspěšných pokusech o přístup). Úspěšné ověření resetuje počet neúspěšných pokusů o přístup a resetuje hodiny. Maximální počet neúspěšných pokusů o přístup a časový limit uzamčení lze nastavit pomocí MaxFailedAccessAttempts a DefaultLockoutTimeSpan. Následující konfigurace uzamčení účtu po dobu 10 minut po 10 neúspěšných pokusech o přístup:
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);
}
Ověřte, že PasswordSignInAsync nastaví lockoutOnFailure
na true
:
var result = await _signInManager.PasswordSignInAsync(
Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);