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 Erik Reitan
Bu öğreticide, Two-Factor Kimlik Doğrulaması ile bir ASP.NET Web Forms uygulaması oluşturma gösterilmektedir. Bu öğretici, kullanıcı kaydı, e-posta onayı ve parola sıfırlamaile güvenli ASP.NET Web Forms uygulaması oluşturma
başlıklı öğreticiyi tamamlayacak şekilde tasarlanmıştır. Buna ek olarak, bu öğretici Rick Anderson'un MVC öğreticisidayanmaktadır.
Giriş
Bu öğretici, Visual Studio kullanarak Two-Factor Kimlik Doğrulamasını destekleyen bir ASP.NET Web Forms uygulaması oluşturmak için gereken adımlarda size yol gösterir. Two-Factor Kimlik Doğrulaması, fazladan bir kullanıcı kimlik doğrulaması adımıdır. Bu ek adım, oturum açma sırasında benzersiz bir kişisel kimlik numarası (PIN) oluşturur. PIN genellikle kullanıcıya e-posta veya SMS iletisi olarak gönderilir. Ardından uygulamanızın kullanıcısı oturum açarken PIN'i ek kimlik doğrulama ölçüsü olarak girer.
Öğretici Görevleri ve Bilgileri:
- ASP.NET Web Forms Uygulaması oluşturma
- SMS kurulumu ve Two-Factor Kimlik Doğrulaması
- Kayıtlı Kullanıcı için Two-Factor Kimlik Doğrulamasını Etkinleştirme
- Ek Kaynaklar
ASP.NET Web Forms Uygulaması oluşturma
Visual Studio Express 2013 for Web veya Visual Studio 2013yükleyip çalıştırarak başlayın. Visual Studio 2013 Güncelleştirme 3 veya üzerini de yükleyin. Ayrıca, aşağıda açıklandığı gibi bir Twilio hesabı oluşturmanız gerekir.
Not
Önemli: Bu öğreticiyi tamamlamak için Visual Studio 2013 Güncelleştirme 3 veya daha yenisini yüklemeniz gerekir.
- Yeni bir proje oluşturun (
Dosya - Yeni Proje) ve Yeni Proje iletişim kutusundan .NET Framework sürüm 4.5.2 ile birlikteASP.NET Web Uygulaması şablonunu seçin. Yeni ASP.NET Project iletişim kutusunda Web Formsşablonunu seçin. Varsayılan kimlik doğrulamasını Bireysel Kullanıcı Hesapları olarak bırakın. Ardından, yeni projeyi oluşturmak için Tamam'e tıklayın.
- Proje için Güvenli Yuva Katmanı'nı (SSL) etkinleştirin. Web Formları ile Çalışmaya Başlama öğretici serisinin
bölümündeki Proje için SSL'yi Etkinleştirme adımlarını izleyin. - Visual Studio'da
Paket Yöneticisi Konsolu (Araçları - nuget paket yöneticisi- Paket Yöneticisi Konsolu ) açın ve aşağıdaki komutu girin:
Install-Package Twilio
SMS ve Two-Factor Kimlik Doğrulaması Kurulumu
Bu öğreticide Twilio kullanılır, ancak herhangi bir SMS sağlayıcısını kullanabilirsiniz.
Twilio hesabı oluşturun.
Twilio hesabınızın Pano sekmesinden Hesabı SID kopyalayın ve Kimlik Doğrulama Belirtecini . Bunları daha sonra uygulamanıza ekleyebilirsiniz.
Numaraları sekmesinden Twilio telefon numaranızı da kopyalayın.
Twilio Hesap SID'si, Kimlik Doğrulama Belirteci ve telefon numarası'i uygulamanın kullanımına açın. İşleri basit tutmak için bu değerleri web.config dosyasında depolayacaksınız. Azure'a dağıttığınızda, web sitesi yapılandırma sekmesindeki appSettings bölümünde değerleri güvenli bir şekilde depolayabilirsiniz. Ayrıca, telefon numarasını eklerken yalnızca numaraları kullanın.
SendGrid kimlik bilgilerini de ekleyebileceğinize dikkat edin. SendGrid bir e-posta bildirim hizmetidir. SendGrid'i etkinleştirme hakkında ayrıntılı bilgi için, kullanıcı kaydı, e-posta onayı ve parola sıfırlama ile Güvenli ASP.NET Web Forms Uygulaması Oluşturma öğreticinin 'SendGrid'i Bağlama' bölümüne bakın.</connectionStrings> <appSettings> <!-- SendGrid Credentials--> <add key="emailServiceUserName" value="[EmailServiceAccountUserName]" /> <add key="emailServicePassword" value="[EmailServiceAccountPassword]" /> <!-- Twilio Credentials--> <add key="SMSSID" value="[SMSServiceAccountSID]" /> <add key="SMSAuthToken" value="[SMSServiceAuthorizationToken]" /> <add key="SMSPhoneNumber" value="+[SMSPhoneNumber]" /> </appSettings> <system.web>
Uyarı
Güvenlik : Hassas verileri hiçbir zaman kaynak kodunuzda depolamayın. Bu örnekte hesap ve kimlik bilgileri, Web.config dosyasının appSettings bölümünde depolanır. Azure'da, bu değerleri Azure portalındaki Yapılandır sekmesinde güvenli bir şekilde depolayabilirsiniz. İlgili bilgiler için Rick Anderson'un ASP.NET ve Azure'a parolaları ve diğer hassas verileri dağıtmak için en iyi yöntemler
başlıklı konusuna bakın. aşağıdaki değişiklikleri sarıyla vurgulayarak App_Start\IdentityConfig.cs dosyasındaki
SmsService
sınıfını yapılandırın:public class SmsService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { var Twilio = new TwilioRestClient( ConfigurationManager.AppSettings["SMSSID"], ConfigurationManager.AppSettings["SMSAuthToken"] ); var result = Twilio.SendMessage( ConfigurationManager.AppSettings["SMSPhoneNumber"], message.Destination, message.Body); // Status is one of Queued, Sending, Sent, Failed or null if the number is not valid Trace.TraceInformation(result.Status); // Twilio doesn't currently have an async API, so return success. return Task.FromResult(0); } }
aşağıdaki
using
deyimlerini IdentityConfig.cs dosyasının başına ekleyin:using Twilio; using System.Net; using System.Configuration; using System.Diagnostics;
Sarı renkle vurgulanan satırları kaldırarak Hesabı/Manage.aspx dosyasını güncelleştirin:
<%@ Page Title="Manage Account" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Manage.aspx.cs" Inherits="WebFormsTwoFactor.Account.Manage" %> <%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %> <asp:Content ContentPlaceHolderID="MainContent" runat="server"> <h2><%: Title %>.</h2> <div> <asp:PlaceHolder runat="server" ID="successMessage" Visible="false" ViewStateMode="Disabled"> <p class="text-success"><%: SuccessMessage %></p> </asp:PlaceHolder> </div> <div class="row"> <div class="col-md-12"> <div class="form-horizontal"> <h4>Change your account settings</h4> <hr /> <dl class="dl-horizontal"> <dt>Password:</dt> <dd> <asp:HyperLink NavigateUrl="/Account/ManagePassword" Text="[Change]" Visible="false" ID="ChangePassword" runat="server" /> <asp:HyperLink NavigateUrl="/Account/ManagePassword" Text="[Create]" Visible="false" ID="CreatePassword" runat="server" /> </dd> <dt>External Logins:</dt> <dd><%: LoginsCount %> <asp:HyperLink NavigateUrl="/Account/ManageLogins" Text="[Manage]" runat="server" /> </dd> <%-- Phone Numbers can used as a second factor of verification in a two-factor authentication system. See <a href="https://go.microsoft.com/fwlink/?LinkId=313242">this article</a> for details on setting up this ASP.NET application to support two-factor authentication using SMS. Uncomment the following block after you have set up two-factor authentication --%> <dt>Phone Number:</dt> <%-- <% if (HasPhoneNumber) { %> <dd> <asp:HyperLink NavigateUrl="/Account/AddPhoneNumber" runat="server" Text="[Add]" /> </dd> <% } else { %> <dd> <asp:Label Text="" ID="PhoneNumber" runat="server" /> <asp:HyperLink NavigateUrl="/Account/AddPhoneNumber" runat="server" Text="[Change]" /> | <asp:LinkButton Text="[Remove]" OnClick="RemovePhone_Click" runat="server" /> </dd> <% } %> --%> <dt>Two-Factor Authentication:</dt> <dd> <p> There are no two-factor authentication providers configured. See <a href="https://go.microsoft.com/fwlink/?LinkId=313242">this article</a> for details on setting up this ASP.NET application to support two-factor authentication. </p> <% if (TwoFactorEnabled) { %> <%-- Enabled <asp:LinkButton Text="[Disable]" runat="server" CommandArgument="false" OnClick="TwoFactorDisable_Click" /> --%> <% } else { %> <%-- Disabled <asp:LinkButton Text="[Enable]" CommandArgument="true" OnClick="TwoFactorEnable_Click" runat="server" /> --%> <% } %> </dd> </dl> </div> </div> </div> </asp:Content>
Manage.aspx.cs arkaplan kodunun
Page_Load
işleyicisinde, sarı renkle vurgulanan kod satırının yorumunu kaldırarak aşağıdaki gibi görünmesini sağlayın:protected void Page_Load() { var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>(); HasPhoneNumber = String.IsNullOrEmpty(manager.GetPhoneNumber(User.Identity.GetUserId())); // Enable this after setting up two-factor authentientication PhoneNumber.Text = manager.GetPhoneNumber(User.Identity.GetUserId()) ?? String.Empty; TwoFactorEnabled = manager.GetTwoFactorEnabled(User.Identity.GetUserId()); LoginsCount = manager.GetLogins(User.Identity.GetUserId()).Count; var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; if (!IsPostBack) { // Determine the sections to render if (HasPassword(manager)) { ChangePassword.Visible = true; } else { CreatePassword.Visible = true; ChangePassword.Visible = false; } // Render success message var message = Request.QueryString["m"]; if (message != null) { // Strip the query string from action Form.Action = ResolveUrl("~/Account/Manage"); SuccessMessage = message == "ChangePwdSuccess" ? "Your password has been changed." : message == "SetPwdSuccess" ? "Your password has been set." : message == "RemoveLoginSuccess" ? "The account was removed." : message == "AddPhoneNumberSuccess" ? "Phone number has been added" : message == "RemovePhoneNumberSuccess" ? "Phone number was removed" : String.Empty; successMessage.Visible = !String.IsNullOrEmpty(SuccessMessage); } } }
Hesabı/TwoFactorAuthenticationSignIn.aspx.cskodu üzerinde, sarı renkle vurgulanan aşağıdaki kodu ekleyerek
Page_Load
işleyicisini güncelleyin.protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { var userId = signinManager.GetVerifiedUserId<ApplicationUser, string>(); if (userId == null) { Response.Redirect("/Account/Error", true); } var userFactors = manager.GetValidTwoFactorProviders(userId); Providers.DataSource = userFactors.Select(x => x).ToList(); Providers.DataBind(); } }
Yukarıdaki kod değişikliği yapılarak, kimlik doğrulama seçeneklerini içeren "Sağlayıcılar" DropDownList değeri ilk değere sıfırlanmaz. Bu, kullanıcının yalnızca ilki değil, kimlik doğrulaması sırasında kullanılacak tüm seçenekleri başarıyla seçmesine olanak tanır.
Çözüm Gezgini'nde, Default.aspx'e sağ tıklayın ve Başlangıç Sayfası Olarak Ayarlaseçin.
Uygulamanızı test ederek, önce uygulamayı derleyin (
Ctrl Shift B ) ve ardından uygulamayı çalıştırın (F5 ) ve yeni bir kullanıcı hesabı oluşturmak için kaydet'iseçin veya kullanıcı hesabı zaten kayıtlıysa oturum aç'ı seçin. (kullanıcı olarak) oturum açtıktan sonra, Hesabı Yönet sayfasını (Manage.aspx) görüntülemek için gezinti çubuğundaki Kullanıcı Kimliği'ne (e-posta adresi) tıklayın.
Hesabı Yönet sayfasında
Telefon Numarası yanındakiEkle 'e tıklayın.
SMS mesajları (kısa mesaj) almak istediğiniz telefon numarasını ekleyin ve Gönder düğmesine tıklayın.
Bu noktada uygulama, Twilio ile iletişim kurmak için Web.config kimlik bilgilerini kullanır. Kullanıcı hesabıyla ilişkilendirilmiş telefona bir SMS mesajı (kısa mesaj) gönderilir. Twilio panosunu görüntüleyerek Twilio iletisinin gönderildiğini doğrulayabilirsiniz.Birkaç saniye içinde, kullanıcı hesabıyla ilişkili telefon doğrulama kodunu içeren bir kısa mesaj alır. Doğrulama kodunu girin ve Göndertuşuna basın.
Kayıtlı Kullanıcı için Two-Factor Kimlik Doğrulamasını Etkinleştirme
Bu noktada, uygulamanız için iki öğeli kimlik doğrulamasını etkinleştirdiniz. Bir kullanıcının iki öğeli kimlik doğrulamasını kullanması için kullanıcı arabirimini kullanarak ayarlarını değiştirmesi yeterlidir.
- Uygulamanızın kullanıcısı olarak, Hesabı Yönet sayfasını görüntülemek için gezinti çubuğundaki kullanıcı kimliğine (e-posta diğer adı) tıklayarak belirli hesabınız için iki öğeli kimlik doğrulamasını etkinleştirebilirsiniz. Ardından, hesap için iki öğeli kimlik doğrulamasını etkinleştirmek için etkinleştir bağlantısına tıklayın.
- Oturumu kapatın, ardından yeniden oturum açın. E-postayı etkinleştirdiyseniz, iki öğeli kimlik doğrulaması için SMS veya e-posta seçebilirsiniz. E-postayı etkinleştirmediyseniz, Kullanıcı Kaydı, E-posta Onayı ve Parola Sıfırlamaile Güvenli ASP.NET Web Forms Uygulaması Oluşturma
başlıklı öğreticiye bakın. Two-Factor Kimlik Doğrulama Sağlayıcısı Seç açılan listesini gösteren Two-Factor Kimlik Doğrulaması tarayıcı penceresinin ekran görüntüsü. - kodu girebileceğiniz Two-Factor Kimlik Doğrulaması sayfası görüntülenir (SMS veya e-postadan).
Bu tarayıcıyı anımsa onay kutusuna tıklandığında, kutuyu işaretlediğiniz tarayıcıyı ve cihazı kullanırken oturum açmak için iki öğeli kimlik doğrulaması kullanmanız gerekmeyecektir. Kötü amaçlı kullanıcılar cihazınıza erişemezse, iki faktörlü kimlik doğrulamasını etkinleştirip Bu tarayıcıyı anımsa seçeneğine tıklarsanız, güvenilir olmayan cihazlardan gelen tüm erişimler için güçlü iki faktörlü kimlik doğrulama koruması sağlanırken, size kullanışlı bir adımda parola erişimi sunar. Bunu düzenli olarak kullandığınız herhangi bir özel cihazda yapabilirsiniz.
Ek Kaynaklar
- ASP.NET Identity ile SMS ve e-posta kullanarak iki öğeli kimlik doğrulaması
- ASP.NET Kimliği İçin Önerilen Kaynaklara Bağlantılar
- Üyelik, OAuth ve SQL Veritabanı ile Güvenli ASP.NET Web Forms Uygulamasını Azure Web Sitesi Dağıtma
- ASP.NET Web Forms Öğretici Serisi - OAuth 2.0 Sağlayıcısı Ekleme
- ASP.NET Web Forms öğretici dizisi - Proje için SSL'yi etkinleştirme
- ASP.NET Kimlik ile Hesap Onayı ve Parola Kurtarma
- Facebook'ta uygulama oluşturma ve uygulamayı projeye bağlama