Aracılığıyla paylaş


SMS Two-Factor Kimlik Doğrulaması ile ASP.NET Web Forms uygulaması oluşturma (C#)

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

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.

  1. Yeni bir proje oluşturun (Dosya - Yeni Proje) ve Yeni Proje iletişim kutusundan .NET Framework sürüm 4.5.2 ile birlikte ASP.NET Web Uygulaması şablonunu seçin.
  2. 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.
    Web Forms simgesinin mavi renkle vurgulandığı Yeni A S P nokta Net Proje iletişim kutusunun ekran görüntüsü.
  3. Proje için Güvenli Yuva Katmanı'nı (SSL) etkinleştirin. Web Formları ile Çalışmaya Başlama öğretici serisininbölümündeki Proje için SSL'yi Etkinleştirme adımlarını izleyin.
  4. 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.

  1. Twilio hesabı oluşturun.

  2. Twilio hesabınızın Pano sekmesinden Hesabı SID kopyalayın ve Kimlik Doğrulama Belirtecini . Bunları daha sonra uygulamanıza ekleyebilirsiniz.

  3. Numaraları sekmesinden Twilio telefon numaranızı da kopyalayın.

  4. 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.

  5. 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);
        }
    }
    
  6. aşağıdaki using deyimlerini IdentityConfig.cs dosyasının başına ekleyin:

    using Twilio;
    using System.Net;
    using System.Configuration;
    using System.Diagnostics;
    
  7. 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]" /> &nbsp;|&nbsp;
                            <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>
    
  8. 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);
            }
        }
    }
    
  9. 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.

  10. Çözüm Gezgini'nde, Default.aspx'e sağ tıklayın ve Başlangıç Sayfası Olarak Ayarlaseçin.

  11. Uygulamanızı test ederek, önce uygulamayı derleyin (CtrlShiftB) ve ardından uygulamayı çalıştırın (F5) ve yeni bir kullanıcı hesabı oluşturmak için kaydet'i seçin veya kullanıcı hesabı zaten kayıtlıysa oturum aç'ı seçin.

  12. (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.
    Kullanıcı Kimliği'nin kırmızı dikdörtgenle vurgulandığı ASP.NET yanıt tarayıcısı penceresinin ekran görüntüsü.

  13. Hesabı Yönet sayfasında Telefon Numarası yanındaki Ekle'e tıklayın.
    Hesap ayarlarının listesini ve bunları değiştirmek için seçenek bağlantılarını gösteren Hesabı Yönet tarayıcı penceresinin ekran görüntüsü.

  14. SMS mesajları (kısa mesaj) almak istediğiniz telefon numarasını ekleyin ve Gönder düğmesine tıklayın.
    Girilen telefon numarası değerini ve Gönder düğmesini içeren Telefon Numarası alanını gösteren Telefon Numarası tarayıcı penceresinin ekran görüntüsü.
    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.

  15. 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.
    Girilen doğrulama kodunu ve Gönder düğmesini içeren Kod alanını gösteren Telefon Numarasını Doğrula tarayıcı penceresinin ekran görüntüsü.

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.

  1. 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.Two-Factor Kimlik Doğrulaması ile ilişkili etkinleştir bağlantısının kırmızıyla vurgulandığı Hesabı Yönet tarayıcı penceresinin ekran görüntüsü.
  2. 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ü.
  3. kodu girebileceğiniz Two-Factor Kimlik Doğrulaması sayfası görüntülenir (SMS veya e-postadan).Girilen doğrulama kodunu ve Gönder düğmesini içeren Kod alanını gösteren Two-Factor Kimlik Doğrulaması tarayıcı penceresinin ekran görüntüsü.
    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