Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tarafından Rick Anderson ve Swiss-Devs
Uyarı
Zaman Tabanlı Tek Seferlik Parola Algoritması (TOTP) kullanan iki faktörlü kimlik doğrulaması (2FA) kimlik doğrulama uygulaması, 2FA için sektör tarafından önerilen yaklaşımdır. TOTP kullanan 2FA, SMS 2FA'ya tercih edilir. Daha fazla bilgi için bkz. ASP.NET Core 2.0 veya üzeri için ASP.NET Core'da TOTP kimlik doğrulayıcı uygulamaları için QR Kodu oluşturmayı etkinleştirme .
Bu öğreticide SMS kullanarak iki öğeli kimlik doğrulamasının (2FA) nasıl ayarlanacağı gösterilmektedir.
Twilio ve ASPSMS ()https://www.aspsms.com/asp.net/identity/core/testcredits/
için yönergeler verilir, ancak başka herhangi bir SMS sağlayıcısını kullanabilirsiniz. Bu öğreticiye başlamadan önce Hesap Onayı ve Parola Kurtarma'yı tamamlamanızı öneririz.
Örnek kodu görüntüleyin veya indirme. nasıl indirilir?
Yeni ASP.NET Core projesi oluşturma
Tek tek hesaplarla adlı Web2FA
yeni bir ASP.NET Core web uygulaması oluşturun. HTTPS'yi ayarlamak ve gerekli kılmak için ASP.NET Core'da HTTPS'yi zorunlu kılma başlığındaki yönergeleri izleyin.
SMS hesabı oluşturma
Örneğin, twilio veya ASPSMS'den (https://www.aspsms.com/asp.net/identity/core/testcredits/
) bir SMS hesabı oluşturun. Kimlik doğrulama kimlik bilgilerini kaydedin (twilio için: accountSid ve authToken, ASPSMS için: Userkey ve Password).
SMS Sağlayıcısı kimlik bilgilerini çözme
Twilio:
Twilio hesabınızın Pano sekmesinden Hesap SID'sini ve Kimlik Doğrulama belirtecini kopyalayın.
ASPSMS:
Hesap ayarlarınızdan Userkey'e gidin ve Parolanızla birlikte kopyalayın.
Bu değerleri daha sonra anahtarlar SMSAccountIdentification
ve SMSAccountPassword
içindeki secret-manager aracı ile depolayacağız.
SenderID / Gönderici Belirtme
Twilio: Numaralar sekmesinden Twilio telefon numaranızı kopyalayın.
ASPSMS: Başlatanların Kilidini Aç Menüsünde bir veya daha fazla Kaynakçının kilidini açın veya alfasayısal bir KaynakLayıcı seçin (Tüm ağlar tarafından desteklenmez).
Bu değeri daha sonra SMSAccountFrom
anahtarıyla secret-manager aracı kullanarak depolayacağız.
SMS hizmeti için kimlik bilgilerini sağlama
Kullanıcı hesabına ve anahtar ayarlarına erişmek için Seçenekler desenini kullanacağız.
- Güvenli SMS anahtarını getirmek için bir sınıf oluşturun. Bu örnek için
SMSoptions
sınıfıServices/SMSoptions.cs
dosyasında oluşturulmuştur.
namespace Web2FA.Services
{
public class SMSoptions
{
public string SMSAccountIdentification { get; set; }
public string SMSAccountPassword { get; set; }
public string SMSAccountFrom { get; set; }
}
}
SMSAccountIdentification
, SMSAccountPassword
ve SMSAccountFrom
değerlerini gizli yöneticisi aracı ile ayarlayın. Örneğin:
C:/Web2FA/src/WebApp1>dotnet user-secrets set SMSAccountIdentification 12345
info: Successfully saved SMSAccountIdentification = 12345 to the secret store.
- SMS sağlayıcısı için NuGet paketini ekleyin. Paket Yöneticisi Konsolu'ndan (PMC) komutunu çalıştırın:
Twilio:
Install-Package Twilio
ASPSMS:
Install-Package ASPSMS
- SMS'i
Services/MessageServices.cs
etkinleştirmek için dosyaya kod ekleyin. Twilio veya ASPSMS bölümünü kullanın:
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);
}
}
}
Başlangıcı kullanacak şekilde yapılandırın SMSoptions
SMSoptions
yönteminde ConfigureServices
hizmet kapsayıcısına ekleyin Startup.cs
.
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
services.Configure<SMSoptions>(Configuration);
}
İki öğeli kimlik doğrulamasını etkinleştirme
Views/Manage/Index.cshtml
Razor Görünüm dosyasını açın ve açıklama karakterlerini kaldırın (böylece işaretleme açıklama olarak işaretlenmez).
İki öğeli kimlik doğrulaması ile oturum açma
- Uygulamayı çalıştırma ve yeni bir kullanıcı kaydetme
- Denetleyiciyi yönet bölümünde eylem yöntemini etkinleştiren
Index
kullanıcı adınıza dokunun. Ardından telefon numarası Ekle bağlantısına dokunun.
- Doğrulama kodunu alacak bir telefon numarası ekleyin ve Doğrulama kodu gönder'e dokunun.
- Doğrulama kodunu içeren bir kısa mesaj alırsınız. Girin ve Gönder'e dokunun
Kısa mesaj alamazsanız, Twilio kayıt sayfasına bakın.
- Yönet görünümü, telefon numaranızın başarıyla eklendiğini gösterir.
- İki öğeli kimlik doğrulamasını etkinleştirmek için Etkinleştir'e dokunun.
İki öğeli kimlik doğrulamasını test edin
Oturumu kapatın.
Oturum aç.
Kullanıcı hesabı iki öğeli kimlik doğrulamasını etkinleştirdiği için ikinci kimlik doğrulama faktörünü sağlamanız gerekir. Bu öğreticide telefon doğrulamayı etkinleştirdiniz. Yerleşik şablonlar, ikinci faktör olarak e-postayı ayarlamanıza da olanak sağlar. QR kodları gibi kimlik doğrulaması için ek ikinci faktörler ayarlayabilirsiniz. Gönder'e dokunun.
SMS iletisinde size gelen kodu girin.
Bu tarayıcıyı anımsa onay kutusuna tıkladığınızda, aynı cihaz ve tarayıcıyı kullanırken oturum açmak için 2FA kullanmanız gerekmeyecektir. 2FA'yı etkinleştirmek ve Bu tarayıcıyı anımsa seçeneğine tıklamak, cihazınıza erişimi olmadığı sürece hesabınıza erişmeye çalışan kötü amaçlı kullanıcılara karşı güçlü 2FA koruması sağlar. Bunu düzenli olarak kullandığınız herhangi bir özel cihazda yapabilirsiniz. Bu tarayıcıyı anımsa ayarıyla, düzenli olarak kullanmadığınız cihazlardan 2FA'nın ek güvenliğini elde edersiniz ve kendi cihazlarınızda 2FA'dan geçmeme konusunda kolaylık elde edersiniz.
Kaba kuvvet saldırılarına karşı koruma için hesap kilitlemesi
2FA ile hesap kilitleme önerilir. Bir kullanıcı yerel bir hesap veya sosyal hesap aracılığıyla oturum açtığında, 2FA'daki başarısız girişimlerin her biri depolanır. En fazla başarısız erişim denemesine ulaşılırsa, kullanıcı kilitlenir (varsayılan: 5 başarısız erişim girişiminden sonra 5 dakikalık kilitleme). Başarılı bir kimlik doğrulaması başarısız olan erişim denemelerinin sayısını sıfırlar ve saati sıfırlar. MaxFailedAccessAttempts ve DefaultLockoutTimeSpan ile en fazla başarısız erişim denemesi ve kilitleme süresi ayarlanabilir. Aşağıda, 10 başarısız erişim girişiminden sonra 10 dakika boyunca hesap kilitleme yapılandırılır:
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);
}
PasswordSignInAsync
lockoutOnFailure
öğesini true
olarak ayarladığını onaylayın.
var result = await _signInManager.PasswordSignInAsync(
Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
ASP.NET Core