Ortamı ayarlama

Tamamlandı

Bu ünitede, Identity mimarisine yönelik bilgi edineceksiniz. Modülün Linux geliştirme ortamını ayarlamak için bir betik çalıştırarak başlarsınız. Betik, platformlar arası bir başlangıç projesi indirir ve modüldeki görevleri desteklemek için gereken Azure kaynaklarını sağlar. Identity, başlangıç projesine eklenir. Linux deneyimi gerekmez.

Bu modül, Identity tarafından desteklenen olası EF Core veri depolarının yalnızca iki tanesine odaklanır. Tercihinizi belirlemek için yukarıdaki iki durumlu denetimi kullanın.

Geliştirme ortamını ayarlama

Komut kabuğunda aşağıdaki komutu çalıştırın. Bu komut, yukarıdaki iki durumlu denetimdeki veri deposu seçiminizi yansıtır. Kurulumun tamamlanması birkaç dakika sürebilir. Betik çalışırken okumaya devam edin.

. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "pg"
. <(wget -q -O - https://aka.ms/secure-aspnet-core-identity-setup) "sql"

İpucu

Komutları panoya kopyalamak için Kopyala düğmesini kullanabilirsiniz. Yapıştırmak için Cloud Shell penceresinde yeni bir satıra sağ tıklayın ve Yapıştır' ı seçin veya SHIFT + Ekle klavye kısayolunu kullanın (MacOS 'ta ⌘ + V ).

Yukarıdaki komut, bir GitHub deposundan kurulum betiğini alır ve çalıştırır. Betik aşağıdaki adımları tamamlar:

  • Bir GitHub deposundan ASP.NET Core başlama kodunu kopyalar.
  • Web uygulamasına veri sağlamak için ASP.NET Core web API’sini oluşturup dağıtır.
  • Identity Framework varlıklarını depolamak için bir veritabanını sağlar.
  • Bu modül için gereken ortam değişkenlerini ayarlar.
  • Azure kaynaklarının bağlantı bilgilerini görüntüler.
  • Başlama kodunu görüntülemek için Cloud Shell Düzenleyicisini başlatır.

ASP.NET Core Identity mimarisini gözden geçirme

ASP.NET Core Identity, kullanıcı kaydı ve oturum açma özelliklerini ASP.NET Core web kullanıcı arabirimine ekleyen bir üyelik sistemidir. Üyelik sistemi, hem kimlik doğrulaması hem de yetkilendirme özelliklerini işler. Kimlik doğrulaması, kim olduğunuzla ilgilidir. Yetkilendirme, neleri yapma izniniz olduğuyla ilgilidir. Bu nedenle kimlik doğrulaması, yetkilendirme için bir önkoşuldur.

Identity, yerel hesap oluşturmaya alternatif olarak Facebook ve Twitter gibi dış oturum açma sağlayıcılarını da destekler. Kullanıcı oturumları, tanımlama bilgisi tabanlı kimlik doğrulaması kullanılarak korunur. Tanımlama bilgisi, varsayılan olarak oturum açma esnasında oluşturulur ve oturum kapatıldığında yok edilir.

Üyelik verileri, seçtiğiniz bir veri deposu ve veri erişimi teknolojisi kullanılarak kalıcı hale getirilir. Varsayılan veri erişimi teknolojisi, Entity Framework (EF) Core adlı bir Nesne İlişkisel Eşleyicisi’dir (O/RM). Varsayılan veri deposu SQL Server’dır.

Temel alınan veritabanıyla etkileşime geçme işleminin karmaşası, EF Core tarafından soyutlanır. Bu nedenle, EF Core genellikle kendi veritabanı sağlayıcılarının tümünün Identity ile kullanılmasını mümkün kılar. PostgreSQL, SQLite ve diğer birçok veri deposu için veritabanı sağlayıcıları sunulur. Ancak, PostgreSQL üçüncü taraf bir sağlayıcı olduğundan Microsoft tarafından sunulan destek için uygun değildir. Identity, seçtiğiniz veri erişimi teknolojisini kullanma esnekliğini de sunar. Dapper, popüler alternatiflerden biridir.

Aşağıdaki diyagram, bu modülde kullanılan Identity mimarisini gösterir:

mimari diyagramı.

mimari diyagramı.

Yukarıdaki diyagramda:

  • ASP.NET Core Razor Pages uygulaması, bu modül kapsamında Identity desteğinin ekleneceği web kullanıcı arabirimini temsil eder.
  • Identity Manager katmanı, Microsoft.AspNetCore.Identity ad alanından kullanılan sınıfları içerir. Bu modülde açıkça kullanılan bu türden sınıflara örnek olarak SignInManager<TUser> ve UserManager<TUser> gösterilebilir.
  • EF Core Identity Deposu katmanı, Microsoft.AspNetCore.Identity.EntityFrameworkCore ad alanındaki sınıfları içerir. Bu modülde bu türden bir sınıfın açıkça kullanılmasına örnek olarak UserStore<TUser> verilebilir.
  • Veritabanı Sağlayıcısı, EF Core Sağlayıcısı’ndan SQL’yi kabul edip (görüntülenmemiştir) bunu yürüten, veritabanına özgü bir kitaplıktır.

Proje gereksinimlerinizi gözden geçirme

Paydaşlarınız aşağıdaki iş gereksinimlerini tanımladı:

  • Sistem için iki tür kimliği doğrulanmış kullanıcı bulunur: çalışanlar ve yöneticiler.
  • Anonim kullanıcıların ürün kataloğunu görüntülemesine izin verilmez.
  • Çalışanlar yalnızca ürün kataloğunu görüntüleyebilir.
  • Yöneticiler ürünleri değiştirebilir.
  • Oturum başarıyla açıldıktan sonra, kullanıcının adı ve soyadı uygulamanın üst bilgisinde görünmelidir.

Geliştirme ekibiniz aşağıdaki teknik kararları aldı:

  • Identity verileri kendi veritabanında yalıtılmalıdır.
  • Identity’yi destekleyen veritabanı tabloları, varsayılan şemaya ait olmalıdır.
  • Yöneticiler, tek kullanımlık belirteç kullanarak kendilerini kaydeder.
  • Uygulama, bir TOTP kimlik doğrulayıcı uygulaması kullanılarak çok faktörlü kimlik doğrulaması özelliğiyle oturum açmayı desteklemelidir.
  • Veritabanı kimlik bilgileri Azure Key Vault’ta depolanmalıdır.

Başlama kodunu gözden geçirme

Uygulama, ContosoPets.Ui adlı tek bir ASP.NET Core Razor Pages projesinden oluşur. Proje, ürün verilerinin görüntülenip yönetilmesi için kullanıcı arabirimini içerir. Ürün verileri, bir dış ASP.NET Core web API’si aracılığıyla yönetilir.

ContosoPets.Ui dosyasında yer alan aşağıdaki dosya ve dizinler özellikle önemlidir:

Ad Açıklama
Controllers/AdminTokenController.cs AdminRegistrationTokenService öğesini bir HTTP uç noktası olarak kullanıma sunar. Ünite 6’ya kadar kullanılmayacaktır.
Pages/Products/ CRUD işlemlerine yönelik web kullanıcı arabirimini içerir.
Services/AdminRegistrationTokenService.cs Yöneticilerin kendi kendilerine kaydolmalarına izin veren belirteçler oluşturur. Ünite 6’ya kadar kullanılmayacaktır.
Services/ProductService.cs Dış ASP.NET Core web API’si ile tüm etkileşimleri yönetir.
Services/QRCodeService.cs Çok faktörlü kimlik doğrulamasını desteklemek için QR kodlarının oluşturulmasını yönetir. Ünite 5’e kadar kullanılmayacaktır.
wwwroot/js/product.js Bir ürünün, sunucu tarafında geri gönderme olmadan Pages/Products/Index.cshtml dosyasından silinmesine olanak tanır.
Program.cs Uygulamanın ana giriş noktası olarak görev yapar ve Azure Key Vault yapılandırma sağlayıcısını kaydeder.
Startup.cs Hizmetleri ve uygulamanın HTTP isteği işlem hattını yapılandırır.

Not

Azure Key Vault, hassas verileri güvenli bir şekilde depolamak ve almak için kullanılır. Başlangıç kodu, veritabanı kimlik bilgilerini güvenli hale getirmek için mümkün olan bir yöntemi göstermek için bunu uygular. Identity ile ilişkisi olmadığı için bu modülün kapsamı dışındadır. Key Vault kayıt kodu için Program.cs dosyasındaki ConfigureKeyVault metoduna bakın.

Veritabanı bağlantısını doğrulama

Şu komutu çalıştırın:

db -c "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'"

Betik bir db diğer adı oluşturur. Diğer ad, --host (sunucu ana bilgisayar adı), --port (bağlantı noktası numarası), --username ve --dbname (veritabanı adı) seçenekleri ile psql öğesine karşılık gelir. psql, PGPASSWORD adlı bir ortam değişkeninden parolayı alır. PSQL, PostgreSQL veritabanlarını yönetmeye ve sorgulamaya yönelik bir platformlar arası komut satırı aracıdır. Yukarıdaki komut, PostgreSQL veritabanında önceden oluşturulan sistem dışı tabloların listesini alır.

Beklendiği gibi, veritabanı yalnızca sistem tablolarını içerdiğinden liste boştur.

 tablename 
-----------
(0 rows)
db -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbo' ORDER BY TABLE_NAME" -Y 25

Betik bir db diğer adı oluşturur. Diğer ad, -U (kullanıcı adı), -P (parola), -S (sunucu ana bilgisayar adı) ve -d (veritabanı adı) seçenekleri ile sqlcmd öğesine karşılık gelir. sqlcmd, SQL Server veritabanlarını yönetmeye ve sorgulamaya yönelik bir platformlar arası komut satırı aracıdır. Yukarıdaki komut, Azure SQL Veritabanı’nda önceden oluşturulan sistem dışı tabloların listesini alır.

Beklendiği gibi, veritabanının dbo şemasında tablo bulunmadığı için liste boştur.

TABLE_NAME
-------------------------

(0 rows affected)