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
Bu öğreticide, Two-Factor Kimlik Doğrulamasını kullanarak bir ASP.NET MVC 5 web uygulaması nasıl oluşturabileceğinizi göreceksiniz. Devam etmeden önce oturum açma, e-posta onayı ve parola sıfırlama ile güvenli ASP.NET MVC 5 web uygulaması oluşturma
tamamlamanız gerekir. Tamamlanmış uygulama buradanindirebilirsiniz. İndirme işlemi, bir e-posta veya SMS sağlayıcısı ayarlamadan e-posta onayını ve SMS'i test etmenizi sağlayan hata ayıklama yardımcılarını içerir. Bu öğretici, Rick Anderson ( Twitter: @RickAndMSFT ) tarafından yazılmıştır.
- ASP.NET MVC uygulaması oluşturma
- İki öğeli kimlik doğrulama için SMS ayarlama
- İki öğeli kimlik doğrulamasını etkinleştirme
- Ek Kaynaklar
ASP.NET MVC uygulaması oluşturma
Web veya üzeri için Visual Studio Express 2013
Not
Uyarı: Devam etmeden önce oturum açma, e-posta onayı ve parola sıfırlama ile güvenli ASP.NET MVC 5 web uygulaması oluşturma
- Yeni bir ASP.NET Web projesi oluşturun ve MVC şablonunu seçin. Web Forms, ASP.NET Kimliğini de desteklediği için bir web formları uygulamasında benzer adımları izleyebilirsiniz.
- Varsayılan kimlik doğrulamasını
Bireysel Kullanıcı Hesapları olarak bırakın. Uygulamayı Azure'da barındırmak istiyorsanız onay kutusunu işaretli bırakın. Eğitimin ilerleyen bölümlerinde Azure'a dağıtacağız. Ücretsiz için bir Azure hesabıaçabilirsiniz. - projesini SSLkullanacak şekilde ayarlayın.
İki öğeli kimlik doğrulaması için SMS'i ayarlama
Bu öğreticide Twilio veya ASPSMS kullanma yönergeleri sağlanır, ancak diğer SMS sağlayıcılarını kullanabilirsiniz.
SMS sağlayıcısıyla Kullanıcı Hesabı Oluşturma
Ekstra paketleri yükleme veya hizmet referansları ekleme
Twilio:
Paket Yöneticisi Konsolu'na aşağıdaki komutu girin:
Install-Package Twilio
ASPSMS:
Aşağıdaki hizmet referansının eklenmesi gerekir:Adres:
https://webservice.aspsms.com/aspsmsx2.asmx?WSDL
Namespace:
ASPSMSX2
SMS Sağlayıcısı Kullanıcı kimlik bilgilerini çözme
En güvenli güvenli kimlik doğrulama seçeneğini kullanmanızı öneririz. Azure'a dağıtılan .NET uygulamaları için bkz:
- .NET için Azure Key Vault kitaplıkları
- .NET Aspire ve Azure Key Vault entegrasyonu
Azure Key Vault ve .NET Aspire, gizli bilgileri depolamak ve almak için en güvenli yolu sunar. Azure Key Vault, şifreleme anahtarlarını ve sertifikalar, bağlantı dizeleri ve parolalar gibi gizli dizileri koruyan bir bulut hizmetidir. .NET Aspire için bkz. Barındırma ve istemci tümleştirmeleri arasında güvenli iletişim.
Kaynak Sahibi Parola Kimlik Bilgisi Yetkilendirmesinden kaçının, çünkü:
- Kullanıcının parolasını istemciye gösterir.
- Önemli bir güvenlik riskidir.
- Yalnızca diğer kimlik doğrulama akışları mümkün olmadığında kullanılmalıdır.
Uygulama bir test sunucusuna dağıtıldığında, bağlantı dizesini test veritabanı sunucusuna ayarlamak için bir ortam değişkeni kullanılabilir. Ortam değişkenleri genellikle düz, şifrelenmemiş metinde depolanır. Makine veya işlemin güvenliği ihlal edilirse ortam değişkenlerine güvenilmeyen taraflar tarafından erişilebilir. Üretim bağlantı dizesini depolamak için ortam değişkenlerini kullanmaktan kaçınmanızı öneririz çünkü bu en güvenli yaklaşım değildir.
Yapılandırma verileri yönergeleri:
- Parolaları veya diğer hassas verileri hiçbir zaman yapılandırma sağlayıcısı kodunda veya düz metin yapılandırma dosyalarında depolamayın.
- Geliştirme veya test ortamlarında üretim sırlarını kullanmayın.
- Proje dışındaki gizli bilgileri belirleyerek yanlışlıkla bir kaynak kod deposuna eklenmemelerini sağlayın.
Twilio:
Twilio hesabınızın Panosu sekmesinden Hesap SID kopyalayın ve Kimlik Doğrulama belirtecinikopyalayın.
ASPSMS:
Hesap ayarlarınızdan Userkey adresine gidin ve bunu kendi tanımlı Parolaile birlikte kopyalayın.
Bu değerleri daha sonra ve "SMSAccountIdentification"
anahtarları içinde "SMSAccountPassword"
dosyasında depolayacağız.
4. SenderID / Kaynak Belirleme
Twilio:
Numaraları sekmesinden Twilio telefon numaranızı kopyalayın.
ASPSMS:
KaynakÇıları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 web.config dosyasında "SMSAccountFrom"
anahtarı içinde depolayacağız.
5. SMS sağlayıcısı kimlik bilgilerini uygulama aktarma
Kimlik bilgilerini ve gönderen telefon numarasını uygulamanın kullanımına açın. İşleri basit tutmak için bu değerleri web.config dosyasında depolayacağız. Azure'a dağıtım yaptığımızda, web sitesi yapılandırma sekmesindeki uygulama ayarları bölümünde değerleri güvenli bir şekilde depolayabiliriz.
[!code-xml[Main](aspnet-mvc-5-app-with-sms-and-email-two-factor-authentication/samples/sample1.xml?highlight=8-10)]
> [!WARNING]
> Security - Never store sensitive data in your source code. The account and credentials are added to the code above to keep the sample simple. See [Best practices for deploying passwords and other sensitive data to ASP.NET and Azure](../../../identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-and-azure.md).
SMS sağlayıcısına veri aktarımının uygulanması
SmsService
dosyasında sınıfını yapılandırın.Kullanılan SMS sağlayıcısına bağlı olarak Twilio veya ASPSMS bölümünü etkinleştirin:
public class SmsService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { // Twilio Begin //var accountSid = ConfigurationManager.AppSettings["SMSAccountIdentification"]; //var authToken = ConfigurationManager.AppSettings["SMSAccountPassword"]; //var fromNumber = ConfigurationManager.AppSettings["SMSAccountFrom"]; //TwilioClient.Init(accountSid, authToken); //MessageResource result = MessageResource.Create( //new PhoneNumber(message.Destination), //from: new PhoneNumber(fromNumber), //body: message.Body //); ////Status is one of Queued, Sending, Sent, Failed or null if the number is not valid //Trace.TraceInformation(result.Status.ToString()); ////Twilio doesn't currently have an async API, so return success. //return Task.FromResult(0); // Twilio End // ASPSMS Begin // var soapSms = new MvcPWx.ASPSMSX2.ASPSMSX2SoapClient("ASPSMSX2Soap"); // soapSms.SendSimpleTextSMS( // System.Configuration.ConfigurationManager.AppSettings["SMSAccountIdentification"], // System.Configuration.ConfigurationManager.AppSettings["SMSAccountPassword"], // message.Destination, // System.Configuration.ConfigurationManager.AppSettings["SMSAccountFrom"], // message.Body); // soapSms.Close(); // return Task.FromResult(0); // ASPSMS End } }
Views\Manage\Index.cshtml Razor görünümünü güncelleştirin: (not: Yalnızca çıkış kodundaki açıklamaları kaldırmayın, aşağıdaki kodu kullanın.)
@model MvcPWy.Models.IndexViewModel @{ ViewBag.Title = "Manage"; } <h2>@ViewBag.Title.</h2> <p class="text-success">@ViewBag.StatusMessage</p> <div> <h4>Change your account settings</h4> <hr /> <dl class="dl-horizontal"> <dt>Password:</dt> <dd> [ @if (Model.HasPassword) { @Html.ActionLink("Change your password", "ChangePassword") } else { @Html.ActionLink("Create", "SetPassword") } ] </dd> <dt>External Logins:</dt> <dd> @Model.Logins.Count [ @Html.ActionLink("Manage", "ManageLogins") ] </dd> <dt>Phone Number:</dt> <dd> @(Model.PhoneNumber ?? "None") [ @if (Model.PhoneNumber != null) { @Html.ActionLink("Change", "AddPhoneNumber") @: | @Html.ActionLink("Remove", "RemovePhoneNumber") } else { @Html.ActionLink("Add", "AddPhoneNumber") } ] </dd> <dt>Two-Factor Authentication:</dt> <dd> @if (Model.TwoFactor) { using (Html.BeginForm("DisableTwoFactorAuthentication", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <text>Enabled <input type="submit" value="Disable" class="btn btn-link" /> </text> } } else { using (Html.BeginForm("EnableTwoFactorAuthentication", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <text>Disabled <input type="submit" value="Enable" class="btn btn-link" /> </text> } } </dd> </dl> </div>
EnableTwoFactorAuthentication
'dekiDisableTwoFactorAuthentication
veManageController
eylem metotlarının,[ValidateAntiForgeryToken] özniteliğine sahip olduğunu doğrulayın.// // POST: /Manage/EnableTwoFactorAuthentication [HttpPost,ValidateAntiForgeryToken] public async Task<ActionResult> EnableTwoFactorAuthentication() { await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), true); var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInAsync(user, isPersistent: false); } return RedirectToAction("Index", "Manage"); } // // POST: /Manage/DisableTwoFactorAuthentication [HttpPost, ValidateAntiForgeryToken] public async Task<ActionResult> DisableTwoFactorAuthentication() { await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), false); var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInAsync(user, isPersistent: false); } return RedirectToAction("Index", "Manage"); }
Uygulamayı çalıştırın ve daha önce kaydettiğiniz hesapla oturum açın.
Index
denetleyicisindeManage
eylem yöntemini etkinleştiren Kullanıcı Kimliğinize tıklayın.
Ekle'ye tıklayın.
AddPhoneNumber
eylem yöntemi, SMS mesajları alabilen bir telefon numarası girmek için bir iletişim kutusu görüntüler.// GET: /Account/AddPhoneNumber public ActionResult AddPhoneNumber() { return View(); }
Birkaç saniye içinde doğrulama kodunu içeren bir kısa mesaj alırsınız. Girin ve Göndertuşuna basın.
Yönet görünümü, telefon numaranızın eklendiğini gösterir.
İki öğeli kimlik doğrulamasını etkinleştirme
Şablon tarafından oluşturulan uygulamada, iki öğeli kimlik doğrulamasını (2FA) etkinleştirmek için kullanıcı arabirimini kullanmanız gerekir. 2FA'yı etkinleştirmek için gezinti çubuğunda kullanıcı kimliğinize (e-posta diğer adı) tıklayın.
2FA'yı etkinleştir'e tıklayın.
Oturumu kapatın ve yeniden oturum açın. E-postayı etkinleştirdiyseniz (bkz. önceki öğreticim), 2FA için SMS veya e-postayı seçebilirsiniz.
Kodu girebileceğiniz Kodu Doğrula sayfası görüntülenir (SMS veya e-postadan).
Bu tarayıcıyı hatırla onay kutusuna tıkladığınızda, kutuyu işaretlediğiniz tarayıcıyı ve cihazı kullanırken oturum açmak için 2FA kullanmanız gerekmeyecektir. Kötü amaçlı kullanıcılar cihazınıza erişemediği sürece, 2FA'yı etkinleştirir ve Bu tarayıcıyı hatırla'ya tıklarsanız, güvenilir olmayan cihazlardan gelen tüm erişimler için sağlam 2FA korumasını korurken size tek adımlı parola erişimi sağlar. Bunu düzenli olarak kullandığınız herhangi bir özel cihazda yapabilirsiniz.
Bu öğretici, yeni bir ASP.NET MVC uygulamasında 2FA'nın etkinleştirilmesine hızlı bir giriş sağlar. ASP.NET Identity ile SMS ve e-posta kullanarak iki öğeli kimlik doğrulaması hakkında olan
Ek Kaynaklar
- SMS ve e-posta kullanarak iki faktörlü kimlik doğrulama ASP.NET Identity ile İki faktörlü kimlik doğrulama hakkında ayrıntılı bilgi verir
- ASP.NET Kimliği Önerilen Kaynaklara Bağlantılar
- ASP.NET Identity ile Hesap Onayı ve Parola Kurtarma parola kurtarma ve hesap onayı hakkında daha detaylı bilgiler sunar.
- Facebook, Twitter, LinkedIn ve Google OAuth2 Oturum Açma ile MVC 5 Uygulaması Bu öğreticide, Facebook ve Google OAuth 2 yetkilendirmesi ile bir ASP.NET MVC 5 uygulamasının nasıl yazılacağı gösterilmektedir. Ayrıca, Kimlik veritabanına nasıl ek veri ekleneceğini de gösterir.
- Üyelik, OAuth ve SQL Veritabanı ile Güvenli ASP.NET MVC uygulamasını Azure Web'e dağıtın. Bu öğreticide Azure dağıtımı, rollerle uygulamanızın güvenliğini sağlama, kullanıcı ve rol eklemek için üyelik API'sini kullanma ve ek güvenlik özellikleri eklenmiştir.
- OAuth 2 için Google uygulaması oluşturma ve uygulamayı projeye bağlama
- Facebook'ta uygulama oluşturma ve uygulamayı projeye bağlama
- Proje'de SSL ayarlama
- C# ve ASP.NET MVC geliştirme ortamınızı ayarlama