Alıştırma - Çok faktörlü kimlik doğrulamasını yapılandırma

Tamamlandı

Identity kullanan ASP.NET Core proje şablonları, TOTP kimlik doğrulayıcı uygulamalarına yönelik çok faktörlü kimlik doğrulamasını varsayılan olarak içerir. Razor Pages şablonunun Kimlik doğrulayıcı uygulamasını yapılandır formu, belirteç değerine yönelik çekirdek oluşturmak için 32 karakterlik bir kayıt anahtarı sağlar. Bu ünitede, kayıt anahtarını içeren QR kodunu sağlamak için Kimlik doğrulayıcı uygulamasını yapılandır formunu özelleştireceksiniz. QR kodu, 32 karakterlik anahtara alternatif bir kimlik doğrulaması mekanizması olarak görev yapar.

QR kodunu oluşturmak için birden fazla strateji bulunur. Bunun bir örneği, üçüncü taraf JavaScript kitaplığı kullanmaktır. Ancak bu ünitede, QR kodunu C# ile oluşturmak için bir üçüncü taraf NuGet paketi kullanılır. Elde edilen QR kodu görüntüsü, Base 64 ile kodlanmış bir dize olarak HTML yer tutucu öğesine eklenir.

QR kodu oluşturma altyapısını inceleme

Identity konusundan uzaklaşmamak için QR kodu oluşturmayı desteklemeye yönelik ortak metin sağlanmıştır. Destekleyici değişiklikler şunları içerir:

  • QRCoder NuGet paketi zaten projede yüklüdür.
  • QRCoder kitaplığı ile yapılan tüm etkileşimler Services/QRCodeService.cs dosyasında soyutlanmıştır. QRCodeService sınıfı:
    • Bir kitaplığa ait QRCodeGenerator sınıfının örneğine erişim elde etmek için oluşturucu eklemeyi kullanır.
    • Base 64 ile kodlanmış dizeyi döndürmek için GetQRCodeAsBase64 metodunu kullanıma sunar. QR kodunun boyutları, GetGraphic metoduna geçirilen tamsayı değeriyle belirlenir. Bu durumda, oluşturulan QR kodu kare şeklinde dört piksel boyutunda olan bloklardan meydana gelir.
  • QRCodeService, Startup.cs dosyasındaki IoC kapsayıcısında bir tekil hizmet olarak kaydedilir.

Çok faktörlü kimlik doğrulamasını özelleştirme

  1. Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs dosyasını açıp aşağıdaki değişiklikleri yapın ve kaydedin:

    1. QR kodunun Base 64 dizesi gösterimini depolamak için EnableAuthenticatorModel sınıfına aşağıdaki özelliği ekleyin:

      public class EnableAuthenticatorModel : PageModel
      {
          private readonly UserManager<ContosoPetsUser> _userManager;
          private readonly ILogger<EnableAuthenticatorModel> _logger;
          private readonly UrlEncoder _urlEncoder;
      
          public string QrCodeAsBase64 { get; set; }      
      
    2. Vurgulanan değişiklikleri OnGetAsync sayfa işleyicisine ekleyin:

      public async Task<IActionResult> OnGetAsync([FromServices] QRCodeService qrCodeService)
      {
          var user = await _userManager.GetUserAsync(User);
          if (user == null)
          {
              return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
          }
      
          await LoadSharedKeyAndQrCodeUriAsync(user);
          QrCodeAsBase64 = qrCodeService.GetQRCodeAsBase64(AuthenticatorUri);
      
          return Page();
      }
      

      Yukarıdaki sayfa işleyicisinde, parametre ekleme QRCodeService tekil hizmetine yönelik bir başvuru sağlar. QR kodu oluşturan bir üçüncü taraf kitaplık ile yapılan etkileşimlerden QRCodeService sorumludur.

    3. QRCodeService başvurusunu çözümlemek için aşağıdaki using deyimini dosyanın en üstüne ekleyin. Yaptığınız değişiklikleri kaydedin.

      using ContosoPets.Ui.Services;
      
  2. Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml dosyasında, aşağıda vurgulanan değişiklikleri yapıp dosyayı kaydedin:

    <li>
        <p>Scan the QR Code or enter this key <kbd>@Model.SharedKey</kbd> into your two factor authenticator app. Spaces and casing do not matter.</p>
        <div class="alert alert-info">Learn how to <a href="https://go.microsoft.com/fwlink/?Linkid=852423">enable QR code generation</a>.</div>
        <div id="qrCode">
            <img alt="embedded QR code" src="data:image/png;base64,@Model.QrCodeAsBase64" />
        </div>
        <div id="qrCodeData" data-url="@Html.Raw(@Model.AuthenticatorUri)"></div>
    </li>
    

    Yukarıdaki işaretleme, Base 64 ile kodlanmış görüntüyü sayfaya ekler.

Çok faktörlü kimlik doğrulamasını test etme

  1. Uygulamayı derlemek için aşağıdaki komutu çalıştırın:

    dotnet build --no-restore
    

    Son derlemeden sonra NuGet paketi eklenmediğinden --no-restore seçeneği de eklenmiştir. Derleme işlemi, NuGet paketlerinin geri yüklenmesini atlar ve uyarı oluşturmadan başarıyla tamamlanır. Derleme başarısız olursa, sorun giderme bilgileri için çıkışı inceleyin.

  2. Aşağıdaki komutu çalıştırarak uygulamayı Azure App Service’e dağıtın:

    az webapp up
    
  3. Siteye gidip (zaten oturum açmadıysanız) kayıtlı kullanıcılardan biriyle oturum açın. Merhaba [Ad] [Soyadı]! bağlantısını seçip profil yönetimi sayfasına gidin ve İki öğeli kimlik doğrulaması seçeneğini belirleyin.

    Sayfada aşağıdaki iletinin bulunduğuna dikkat edin:

    Privacy and cookie policy have not been accepted.
    You must accept the policy before you can enable two factor authentication.
    
  4. Gizlilik ve tanımlama bilgisi kullanımı ilkesini kabul etmek için ilke başlığındaki Kabul et bağlantısına tıklayın. Sayfayı yenileyin.

    İlkenin kabul edildiğini işaretlemek için .AspNet.Consent adlı bir tanımlama bilgisi oluşturulur. Tanımlama bilgisinin kullanım süresi, kabul tarihinden itibaren 1 yıldır.

  5. Kimlik doğrulayıcı uygulaması ekle düğmesini seçin.

  6. Bu kullanıcı için kimlik doğrulayıcı uygulamasını kaydedip doğrulamak için ekrandaki yönergeleri izleyin.

    Örneğin, Android üzerinde Microsoft Authenticator’ı kullanarak hesabı uygulamaya eklemek için şu adımları izleyin:

    1. Microsoft Authenticator uygulamasını açın.
    2. Sağ üst köşeden dikey üç nokta şeklindeki menüyü seçin.
    3. Hesap ekle’yi seçin.
    4. Diğer hesap (Google, Facebook vb.) seçeneğini belirleyin.
    5. QR kodunu belirtildiği gibi tarayın.
    6. 32 karakterlik anahtarı doğrulamak için Son seçeneğini belirleyin.
  7. TOTP uygulamanız tarafından sağlanan doğrulama kodunu Doğrulama Kodu metin kutusuna girin.

  8. Doğrula seçeneğini belirleyin.

    Doğrulama başarılı olduğunda, sayfada Kimlik doğrulayıcı uygulamanız doğrulandı başlığı ve bazı kurtarma kodları görüntülenir.

  9. AspNetUsers tablosunun TwoFactorEnabled sütunundaki etkisini görmek için aşağıdaki komutu çalıştırın:

    db -c 'SELECT "FirstName", "LastName", "Email", "TwoFactorEnabled" FROM "AspNetUsers"'
    

    Çıkış, oturum açmış kullanıcı için TwoFactorEnabled sütununun t değerine eşit olduğunu gösterir. Kaydolan diğer kullanıcı için çok faktörlü kimlik doğrulaması etkinleştirilmediğinden kaydın sütun değeri f olur.

    db -Q "SELECT FirstName, LastName, Email, TwoFactorEnabled FROM dbo.AspNetUsers" -Y 25
    

    Çıkış, oturum açmış kullanıcı için TwoFactorEnabled sütununun 1 değerine eşit olduğunu gösterir. Kaydolan diğer kullanıcı için çok faktörlü kimlik doğrulaması etkinleştirilmediğinden kaydın sütun değeri 0 olur.

  10. Oturumu kapat seçeneğini belirleyip aynı kullanıcıyla yeniden oturum açın.

  11. Kimlik doğrulayıcı kodu metin kutusuna TOTP kimlik doğrulayıcı uygulamasından alınan doğrulama kodunu girin. Oturum açın düğmesini seçin.

  12. Merhaba [Ad] [Soyadı]! bağlantısını seçin. Ardından, İki öğeli kimlik doğrulama sekmesini seçin.

    Microsoft Authenticator ayarlandığı için aşağıdaki düğmeler görüntülenir:

    • İki öğeli kimlik doğrulamayı devre dışı bırak
    • Kurtarma kodlarını sıfırla
    • Kimlik doğrulayıcısı uygulamasını ayarla
    • Kimlik doğrulayıcısı uygulamasını sıfırla