ASP.NET Core kimlik doğrulamasına genel bakış

Yayınlayan Mike Rousos

Kimlik doğrulaması, kullanıcının kimliğini belirleme işlemidir. Yetkilendirme, bir kullanıcının bir kaynağa erişip erişemeyeceğini belirleme işlemidir. ASP.NET Core’da kimlik doğrulaması, kimlik doğrulaması ara yazılımı tarafından kullanılan kimlik doğrulaması hizmeti, IAuthenticationService tarafından işlenir. Kimlik doğrulaması hizmeti, kimlik doğrulamasıyla ilgili eylemleri tamamlamak için kayıtlı kimlik doğrulaması işleyicilerini kullanır. Kimlik doğrulamasıyla ilgili eylemlere örnek olarak şunlar verilebilir:

  • Kullanıcının kimliğini doğrulama.
  • Kimliği doğrulanmamış bir kullanıcı kısıtlı bir kaynağa erişmeye çalıştığında yanıt verme.

Kayıtlı kimlik doğrulaması işleyicileri ve yapılandırma seçenekleri "düzenler" olarak adlandırılır.

Kimlik doğrulaması şemaları, Program.cs içinde kimlik doğrulaması hizmetleri kaydedilerek belirtilir:

Örneğin, aşağıdaki kod cookie ve JWT taşıyıcı kimlik doğrulaması düzenleri için kimlik doğrulaması hizmetlerini ve işleyicilerini kaydeder:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

AddAuthentication parametresi JwtBearerDefaults.AuthenticationScheme, belirli bir düzen istenmediğinde varsayılan olarak kullanılacak düzenin adıdır.

Birden çok düzen kullanılıyorsa, yetkilendirme ilkeleri (veya yetkilendirme öznitelikleri), kullanıcının kimliğini doğrulamak için bağımlı oldukları kimlik doğrulaması düzenini (veya düzenlerini) belirtebilir. Yukarıdaki örnekte, cookie kimlik doğrulaması düzeni adını belirterek kullanılabilir (varsayılan olarak CookieAuthenticationDefaults.AuthenticationScheme, ancak AddCookie çağrılırken farklı bir ad sağlanabilir).

Bazı durumlarda, AddAuthentication çağrısı diğer uzantı yöntemleri tarafından otomatik olarak yapılır. Örneğin, ASP.NET Core Identity kullanılırken, AddAuthentication dahili olarak çağrılır.

Kimlik doğrulaması ara yazılımı Program.cs içinde UseAuthentication çağrılarak eklenir. UseAuthentication çağrısı, önceden kaydedilmiş kimlik doğrulaması düzenlerini kullanan ara yazılımı kaydeder. Kimlik doğrulaması yapılan kullanıcılara bağlı herhangi bir ara yazılımdan önce UseAuthentication çağrısı yapın.

Kimlik doğrulama kavramları

Kimlik doğrulaması, izin kararları vermek üzere yetkilendirme için ClaimsPrincipal sağlamakla sorumludur. Doğru talep kümesini oluşturmak üzere hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçmek için birden çok kimlik doğrulaması düzeni yaklaşımı vardır:

Yalnızca tek bir kimlik doğrulama şeması kaydedildiğinde, varsayılan düzen haline gelir. Birden çok düzen kayıtlıysa ve varsayılan düzen belirtilmemişse, authorize özniteliğinde bir düzen belirtilmelidir, aksi takdirde aşağıdaki hata oluşur:

InvalidOperationException: AuthenticationScheme belirtilmedi ve DefaultAuthenticateScheme bulunamadı. Varsayılan düzenler AddAuthentication(string defaultScheme) veya AddAuthentication(Action<AuthenticationOptions configureOptions>) kullanılarak ayarlanabilir.

DefaultScheme

Yalnızca tek bir kimlik doğrulama şeması kayıtlı olduğunda, tek kimlik doğrulama düzeni:

Tek kimlik doğrulama düzenini kullanarak otomatik olarak DefaultSchemedevre dışı bırakmak için çağrısı yapın AppContext.SetSwitch("Microsoft.AspNetCore.Authentication.SuppressAutoDefaultScheme").

Kimlik doğrulaması düzeni

Kimlik doğrulaması düzeni, doğru talep kümesini oluşturmaktan hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçebilir. Daha fazla bilgi için, bkz. Belirli bir düzen ile yetkilendirme.

Kimlik doğrulaması düzeni, şu adlara karşılık gelen bir addır:

  • Bir kimlik doğrulaması işleyicisi.
  • İşleyicinin belirli bir örneğini yapılandırma seçenekleri.

Düzenler, ilişkili işleyicinin kimlik doğrulaması, sınama ve yasak davranışlarına başvurmak için bir mekanizma olarak kullanışlıdır. Örneğin, bir yetkilendirme ilkesi, kullanıcının kimliğini doğrulamak için hangi kimlik doğrulaması düzeninin (veya düzenlerin) kullanılacağını belirtmek için düzen adlarını kullanabilir. Kimlik doğrulamasını yapılandırırken, varsayılan kimlik doğrulaması düzenini belirtmek yaygın bir durum olur. Bir kaynak belirli bir düzeni istemediği sürece varsayılan düzen kullanılır. Ayrıca şunlar da yapılabilir:

  • Kimlik doğrulaması, sınama ve yasak eylemler için kullanılacak farklı varsayılan düzenleri belirtme.
  • İlke düzenlerini kullanarak birden çok düzeni tek düzende birleştirme.

Bir kimlik doğrulaması işleyicisi

Bir kimlik doğrulaması işleyicisi:

Kimlik doğrulaması düzeninin yapılandırmasına ve gelen istek bağlamı temelinde kimlik doğrulaması işleyicileri:

  • Kimlik doğrulaması başarılı olursa kullanıcının kimliğini temsil eden AuthenticationTicket nesneleri oluşturma.
  • Kimlik doğrulaması başarısız olursa 'sonuç yok' veya 'hata' döndürme.
  • Kullanıcılar kaynaklara erişmeye çalıştığında sınama ve yasak eylem yöntemlerine sahip olmak için:
    • Bunlara erişim yetkisi yoktur (yasakla).
    • Kimlik doğrulaması yapılmadığında (sınama).

RemoteAuthenticationHandler<TOptions> ve AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions>, bir uzak kimlik doğrulaması adımı gerektiren kimlik doğrulaması sınıfıdır. Uzaktan kimlik doğrulaması adımı tamamlandığında, işleyici, işleyici tarafından ayarlanan CallbackPath öğesi geri çağrılır. İşleyici, HandleRemoteAuthenticateAsync geri çağırma yoluna geçirilen bilgileri kullanarak kimlik doğrulaması adımını tamamlar. OAuth 2.0 ve OIDC’nin her ikisi de bu düzeni kullanır. JWT ve cookie'ler, kimlik doğrulaması için doğrudan taşıyıcı başlığını ve cookie öğesini kullanabildikleri için yapmazlar. Bu durumda uzaktan barındırılan sağlayıcı:

  • Kimlik doğrulaması sağlayıcısıdır.
  • Örnek olarak Facebook, Twitter, Google, Microsoft ve işleyiciler mekanizmasını kullanarak kullanıcıların kimliğini doğrulamayı işleyen diğer OIDC sağlayıcıları verilebilir.

Kimliği doğrula

Kimlik doğrulaması düzeninin kimlik doğrulaması eylemi, istek bağlamını temel alarak kullanıcının kimliğini oluşturmakla sorumludur. Kimlik doğrulamasının başarılı olup olmadığını ve başarılıysa kullanıcının kimliğini bir kimlik doğrulama biletinde gösteren bir AuthenticateResult döndürür. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:

  • cookie'lerden kullanıcının kimliğini oluşturan bir cookie kimlik doğrulaması düzeni.
  • Kullanıcının kimliğini oluşturmak için JWT taşıyıcı belirtecini seri durumdan çıkarma ve doğrulama JWT taşıyıcı düzeni.

Sınama

Kimliği doğrulanmamış bir kullanıcı kimlik doğrulaması gerektiren bir uç nokta istediğinde Yetkilendirme tarafından bir kimlik doğrulaması sınaması çağrılır. Örneğin, anonim bir kullanıcı kısıtlı bir kaynak istediğinde veya oturum açma bağlantısını izlediğinde bir kimlik doğrulaması sınaması verilir. Yetkilendirme, belirtilen kimlik doğrulaması düzenlerini veya belirtilmemişse varsayılanı kullanarak bir sınama çağırır. Bkz. ChallengeAsync. Kimlik doğrulaması sınaması örnekleri şunlardır:

  • Kullanıcıyı oturum açma sayfasına yönlendiren bir cookie kimlik doğrulaması düzeni.
  • www-authenticate: bearer üst bilgisini içeren 401 sonucunu döndüren bir JWT taşıyıcı düzeni.

Sınama eylemi, kullanıcıya istenen kaynağa erişmek için hangi kimlik doğrulaması mekanizmasının kullanılacağını bildirmelidir.

Yasaklama

Kimliği doğrulanmış bir kullanıcı erişim izni olmayan bir kaynağa erişmeye çalıştığında, kimlik doğrulaması düzeninin yasak eylemi Yetkilendirme tarafından çağrılır. Bkz. ForbidAsync. Kimlik doğrulaması yasak örnekleri şunlardır:

  • Kullanıcıyı erişimin yasaklandığını belirten bir sayfaya yönlendiren bir cookie kimlik doğrulaması düzeni.
  • 403 sonucunu döndüren bir JWT taşıyıcı düzeni.
  • Kullanıcının kaynağa erişim isteyebileceği bir sayfaya yeniden yönlendiren özel bir kimlik doğrulaması düzeni.

Yasaklanan bir eylem kullanıcıya şunları bildirir:

  • Kimliklerinin doğrulandığı.
  • İstenen kaynağa erişmelerine izin verilmediği.

Sınama ve yasak arasındaki farklar için aşağıdaki bağlantılara bakın:

Kiracı başına kimlik doğrulaması sağlayıcıları

ASP.NET Core, çok kiracılı kimlik doğrulaması için yerleşik bir çözüme sahip değildir. Müşterilerin yerleşik özellikleri kullanarak yazmaları mümkün olsa da müşterilerin çok kiracılı kimlik doğrulaması için Orchard Core, ABP Framework veya Finbuckle.MultiTenant'ı göz önünde bulundurmalarını öneririz.

Orchard Core:

  • ASP.NET Core ile oluşturulmuş açık kaynak, modüler ve çok kiracılı bir uygulama çerçevesi.
  • Bu uygulama çerçevesinin üzerinde oluşturulmuş bir içerik yönetim sistemi (CMS).

Kiracı başına kimlik doğrulaması sağlayıcıları örneği için, bkz. Orchard Core kaynağı.

ABP Framework modülerlik, mikro hizmetler, etki alanı odaklı tasarım ve çok kiracılılık gibi çeşitli mimari desenleri destekler. Bkz. GitHub'da ABP Framework kaynağı.

Finbuckle.MultiTenant:

  • Açık kaynak
  • Kiracı çözümlemesi sağlar
  • Hafif
  • Veri yalıtımı sağlar
  • Uygulama davranışını her kiracı için benzersiz olarak yapılandırma

Ek kaynaklar

Yayınlayan Mike Rousos

Kimlik doğrulaması, kullanıcının kimliğini belirleme işlemidir. Yetkilendirme, bir kullanıcının bir kaynağa erişip erişemeyeceğini belirleme işlemidir. ASP.NET Core’da kimlik doğrulaması, kimlik doğrulaması ara yazılımı tarafından kullanılan kimlik doğrulaması hizmeti, IAuthenticationService tarafından işlenir. Kimlik doğrulaması hizmeti, kimlik doğrulamasıyla ilgili eylemleri tamamlamak için kayıtlı kimlik doğrulaması işleyicilerini kullanır. Kimlik doğrulamasıyla ilgili eylemlere örnek olarak şunlar verilebilir:

  • Kullanıcının kimliğini doğrulama.
  • Kimliği doğrulanmamış bir kullanıcı kısıtlı bir kaynağa erişmeye çalıştığında yanıt verme.

Kayıtlı kimlik doğrulaması işleyicileri ve yapılandırma seçenekleri "düzenler" olarak adlandırılır.

Kimlik doğrulaması şemaları, Program.cs içinde kimlik doğrulaması hizmetleri kaydedilerek belirtilir:

Örneğin, aşağıdaki kod cookie ve JWT taşıyıcı kimlik doğrulaması düzenleri için kimlik doğrulaması hizmetlerini ve işleyicilerini kaydeder:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

AddAuthentication parametresi JwtBearerDefaults.AuthenticationScheme, belirli bir düzen istenmediğinde varsayılan olarak kullanılacak düzenin adıdır.

Birden çok düzen kullanılıyorsa, yetkilendirme ilkeleri (veya yetkilendirme öznitelikleri), kullanıcının kimliğini doğrulamak için bağımlı oldukları kimlik doğrulaması düzenini (veya düzenlerini) belirtebilir. Yukarıdaki örnekte, cookie kimlik doğrulaması düzeni adını belirterek kullanılabilir (varsayılan olarak CookieAuthenticationDefaults.AuthenticationScheme, ancak AddCookie çağrılırken farklı bir ad sağlanabilir).

Bazı durumlarda, AddAuthentication çağrısı diğer uzantı yöntemleri tarafından otomatik olarak yapılır. Örneğin, ASP.NET Core Identity kullanılırken, AddAuthentication dahili olarak çağrılır.

Kimlik doğrulaması ara yazılımı Program.cs içinde UseAuthentication çağrılarak eklenir. UseAuthentication çağrısı, önceden kaydedilmiş kimlik doğrulaması düzenlerini kullanan ara yazılımı kaydeder. Kimlik doğrulaması yapılan kullanıcılara bağlı herhangi bir ara yazılımdan önce UseAuthentication çağrısı yapın.

Kimlik doğrulama kavramları

Kimlik doğrulaması, izin kararları vermek üzere yetkilendirme için ClaimsPrincipal sağlamakla sorumludur. Doğru talep kümesini oluşturmak üzere hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçmek için birden çok kimlik doğrulaması düzeni yaklaşımı vardır:

Düzenlerin otomatik olarak incelenmesi yoktur. Varsayılan düzen belirtilmezse, düzen yetkilendirme özniteliğinde belirtilmelidir, aksi takdirde aşağıdaki hata verilir:

InvalidOperationException: AuthenticationScheme belirtilmedi ve DefaultAuthenticateScheme bulunamadı. Varsayılan düzenler AddAuthentication(string defaultScheme) veya AddAuthentication(Action<AuthenticationOptions configureOptions>) kullanılarak ayarlanabilir.

Kimlik doğrulaması düzeni

Kimlik doğrulaması düzeni, doğru talep kümesini oluşturmaktan hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçebilir. Daha fazla bilgi için, bkz. Belirli bir düzen ile yetkilendirme.

Kimlik doğrulaması düzeni, şu adlara karşılık gelen bir addır:

  • Bir kimlik doğrulaması işleyicisi.
  • İşleyicinin belirli bir örneğini yapılandırma seçenekleri.

Düzenler, ilişkili işleyicinin kimlik doğrulaması, sınama ve yasak davranışlarına başvurmak için bir mekanizma olarak kullanışlıdır. Örneğin, bir yetkilendirme ilkesi, kullanıcının kimliğini doğrulamak için hangi kimlik doğrulaması düzeninin (veya düzenlerin) kullanılacağını belirtmek için düzen adlarını kullanabilir. Kimlik doğrulamasını yapılandırırken, varsayılan kimlik doğrulaması düzenini belirtmek yaygın bir durum olur. Bir kaynak belirli bir düzeni istemediği sürece varsayılan düzen kullanılır. Ayrıca şunlar da yapılabilir:

  • Kimlik doğrulaması, sınama ve yasak eylemler için kullanılacak farklı varsayılan düzenleri belirtme.
  • İlke düzenlerini kullanarak birden çok düzeni tek düzende birleştirme.

Bir kimlik doğrulaması işleyicisi

Bir kimlik doğrulaması işleyicisi:

Kimlik doğrulaması düzeninin yapılandırmasına ve gelen istek bağlamı temelinde kimlik doğrulaması işleyicileri:

  • Kimlik doğrulaması başarılı olursa kullanıcının kimliğini temsil eden AuthenticationTicket nesneleri oluşturma.
  • Kimlik doğrulaması başarısız olursa 'sonuç yok' veya 'hata' döndürme.
  • Kullanıcılar kaynaklara erişmeye çalıştığında sınama ve yasak eylem yöntemlerine sahip olmak için:
    • Bunlara erişim yetkisi yoktur (yasakla).
    • Kimlik doğrulaması yapılmadığında (sınama).

RemoteAuthenticationHandler<TOptions> ve AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions>, bir uzak kimlik doğrulaması adımı gerektiren kimlik doğrulaması sınıfıdır. Uzaktan kimlik doğrulaması adımı tamamlandığında, işleyici, işleyici tarafından ayarlanan CallbackPath öğesi geri çağrılır. İşleyici, HandleRemoteAuthenticateAsync geri çağırma yoluna geçirilen bilgileri kullanarak kimlik doğrulaması adımını tamamlar. OAuth 2.0 ve OIDC’nin her ikisi de bu düzeni kullanır. JWT ve cookie'ler, kimlik doğrulaması için doğrudan taşıyıcı başlığını ve cookie öğesini kullanabildikleri için yapmazlar. Bu durumda uzaktan barındırılan sağlayıcı:

  • Kimlik doğrulaması sağlayıcısıdır.
  • Örnek olarak Facebook, Twitter, Google, Microsoft ve işleyiciler mekanizmasını kullanarak kullanıcıların kimliğini doğrulamayı işleyen diğer OIDC sağlayıcıları verilebilir.

Kimliği doğrula

Kimlik doğrulaması düzeninin kimlik doğrulaması eylemi, istek bağlamını temel alarak kullanıcının kimliğini oluşturmakla sorumludur. Kimlik doğrulamasının başarılı olup olmadığını ve başarılıysa kullanıcının kimliğini bir kimlik doğrulama biletinde gösteren bir AuthenticateResult döndürür. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:

  • cookie'lerden kullanıcının kimliğini oluşturan bir cookie kimlik doğrulaması düzeni.
  • Kullanıcının kimliğini oluşturmak için JWT taşıyıcı belirtecini seri durumdan çıkarma ve doğrulama JWT taşıyıcı düzeni.

Sınama

Kimliği doğrulanmamış bir kullanıcı kimlik doğrulaması gerektiren bir uç nokta istediğinde Yetkilendirme tarafından bir kimlik doğrulaması sınaması çağrılır. Örneğin, anonim bir kullanıcı kısıtlı bir kaynak istediğinde veya oturum açma bağlantısını izlediğinde bir kimlik doğrulaması sınaması verilir. Yetkilendirme, belirtilen kimlik doğrulaması düzenlerini veya belirtilmemişse varsayılanı kullanarak bir sınama çağırır. Bkz. ChallengeAsync. Kimlik doğrulaması sınaması örnekleri şunlardır:

  • Kullanıcıyı oturum açma sayfasına yönlendiren bir cookie kimlik doğrulaması düzeni.
  • www-authenticate: bearer üst bilgisini içeren 401 sonucunu döndüren bir JWT taşıyıcı düzeni.

Sınama eylemi, kullanıcıya istenen kaynağa erişmek için hangi kimlik doğrulaması mekanizmasının kullanılacağını bildirmelidir.

Yasaklama

Kimliği doğrulanmış bir kullanıcı erişim izni olmayan bir kaynağa erişmeye çalıştığında, kimlik doğrulaması düzeninin yasak eylemi Yetkilendirme tarafından çağrılır. Bkz. ForbidAsync. Kimlik doğrulaması yasak örnekleri şunlardır:

  • Kullanıcıyı erişimin yasaklandığını belirten bir sayfaya yönlendiren bir cookie kimlik doğrulaması düzeni.
  • 403 sonucunu döndüren bir JWT taşıyıcı düzeni.
  • Kullanıcının kaynağa erişim isteyebileceği bir sayfaya yeniden yönlendiren özel bir kimlik doğrulaması düzeni.

Yasaklanan bir eylem kullanıcıya şunları bildirir:

  • Kimliklerinin doğrulandığı.
  • İstenen kaynağa erişmelerine izin verilmediği.

Sınama ve yasak arasındaki farklar için aşağıdaki bağlantılara bakın:

Kiracı başına kimlik doğrulaması sağlayıcıları

ASP.NET Core, çok kiracılı kimlik doğrulaması için yerleşik bir çözüme sahip değildir. Müşterilerin yerleşik özellikleri kullanarak yazması mümkün olsa da, çok kiracılı kimlik doğrulaması için Orchard Core veya ABP Framework’ü göz önünde bulundurmalarını öneririz.

Orchard Core:

  • ASP.NET Core ile oluşturulmuş açık kaynak, modüler ve çok kiracılı bir uygulama çerçevesi.
  • Bu uygulama çerçevesinin üzerinde oluşturulmuş bir içerik yönetim sistemi (CMS).

Kiracı başına kimlik doğrulaması sağlayıcıları örneği için, bkz. Orchard Core kaynağı.

ABP Framework modülerlik, mikro hizmetler, etki alanı odaklı tasarım ve çok kiracılılık gibi çeşitli mimari desenleri destekler. Bkz. GitHub'da ABP Framework kaynağı.

Ek kaynaklar

Yayınlayan Mike Rousos

Kimlik doğrulaması, kullanıcının kimliğini belirleme işlemidir. Yetkilendirme, bir kullanıcının bir kaynağa erişip erişemeyeceğini belirleme işlemidir. ASP.NET Core’da kimlik doğrulaması, kimlik doğrulaması ara yazılımı tarafından kullanılan kimlik doğrulaması hizmeti, IAuthenticationService tarafından işlenir. Kimlik doğrulaması hizmeti, kimlik doğrulamasıyla ilgili eylemleri tamamlamak için kayıtlı kimlik doğrulaması işleyicilerini kullanır. Kimlik doğrulamasıyla ilgili eylemlere örnek olarak şunlar verilebilir:

  • Kullanıcının kimliğini doğrulama.
  • Kimliği doğrulanmamış bir kullanıcı kısıtlı bir kaynağa erişmeye çalıştığında yanıt verme.

Kayıtlı kimlik doğrulaması işleyicileri ve yapılandırma seçenekleri "düzenler" olarak adlandırılır.

Kimlik doğrulaması şemaları, Startup.ConfigureServices içinde kimlik doğrulaması hizmetleri kaydedilerek belirtilir:

Örneğin, aşağıdaki kod cookie ve JWT taşıyıcı kimlik doğrulaması düzenleri için kimlik doğrulaması hizmetlerini ve işleyicilerini kaydeder:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => Configuration.Bind("CookieSettings", options));

AddAuthentication parametresi JwtBearerDefaults.AuthenticationScheme, belirli bir düzen istenmediğinde varsayılan olarak kullanılacak düzenin adıdır.

Birden çok düzen kullanılıyorsa, yetkilendirme ilkeleri (veya yetkilendirme öznitelikleri), kullanıcının kimliğini doğrulamak için bağımlı oldukları kimlik doğrulaması düzenini (veya düzenlerini) belirtebilir. Yukarıdaki örnekte, cookie kimlik doğrulaması düzeni adını belirterek kullanılabilir (varsayılan olarak CookieAuthenticationDefaults.AuthenticationScheme, ancak AddCookie çağrılırken farklı bir ad sağlanabilir).

Bazı durumlarda, AddAuthentication çağrısı diğer uzantı yöntemleri tarafından otomatik olarak yapılır. Örneğin, ASP.NET Core Identity kullanılırken, AddAuthentication dahili olarak çağrılır.

Kimlik doğrulaması ara yazılımı Startup.Configure içinde UseAuthentication çağrılarak eklenir. UseAuthentication çağrısı, önceden kaydedilmiş kimlik doğrulaması düzenlerini kullanan ara yazılımı kaydeder. Kimlik doğrulaması yapılan kullanıcılara bağlı herhangi bir ara yazılımdan önce UseAuthentication çağrısı yapın. Uç nokta yönlendirme kullanılırken UseAuthentication çağrısının gitmesi gerekir:

  • UseRouting sonrasında, kimlik doğrulaması kararları için yol bilgilerinin kullanılabilir olması sağlanır.
  • UseEndpoints öncesinde, kullanıcıların, uç noktalara erişmeden önce kimlikleri doğrulanır.

Kimlik doğrulama kavramları

Kimlik doğrulaması, izin kararları vermek üzere yetkilendirme için ClaimsPrincipal sağlamakla sorumludur. Doğru talep kümesini oluşturmak üzere hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçmek için birden çok kimlik doğrulaması düzeni yaklaşımı vardır:

Düzenlerin otomatik olarak incelenmesi yoktur. Varsayılan düzen belirtilmezse, düzen yetkilendirme özniteliğinde belirtilmelidir, aksi takdirde aşağıdaki hata verilir:

InvalidOperationException: AuthenticationScheme belirtilmedi ve DefaultAuthenticateScheme bulunamadı. Varsayılan düzenler AddAuthentication(string defaultScheme) veya AddAuthentication(Action<AuthenticationOptions configureOptions>) kullanılarak ayarlanabilir.

Kimlik doğrulaması düzeni

Kimlik doğrulaması düzeni, doğru talep kümesini oluşturmaktan hangi kimlik doğrulaması işleyicisinin sorumlu olduğunu seçebilir. Daha fazla bilgi için, bkz. Belirli bir düzen ile yetkilendirme.

Kimlik doğrulaması düzeni, şu adlara karşılık gelen bir addır:

  • Bir kimlik doğrulaması işleyicisi.
  • İşleyicinin belirli bir örneğini yapılandırma seçenekleri.

Düzenler, ilişkili işleyicinin kimlik doğrulaması, sınama ve yasak davranışlarına başvurmak için bir mekanizma olarak kullanışlıdır. Örneğin, bir yetkilendirme ilkesi, kullanıcının kimliğini doğrulamak için hangi kimlik doğrulaması düzeninin (veya düzenlerin) kullanılacağını belirtmek için düzen adlarını kullanabilir. Kimlik doğrulamasını yapılandırırken, varsayılan kimlik doğrulaması düzenini belirtmek yaygın bir durum olur. Bir kaynak belirli bir düzeni istemediği sürece varsayılan düzen kullanılır. Ayrıca şunlar da yapılabilir:

  • Kimlik doğrulaması, sınama ve yasak eylemler için kullanılacak farklı varsayılan düzenleri belirtme.
  • İlke düzenlerini kullanarak birden çok düzeni tek düzende birleştirme.

Bir kimlik doğrulaması işleyicisi

Bir kimlik doğrulaması işleyicisi:

Kimlik doğrulaması düzeninin yapılandırmasına ve gelen istek bağlamı temelinde kimlik doğrulaması işleyicileri:

  • Kimlik doğrulaması başarılı olursa kullanıcının kimliğini temsil eden AuthenticationTicket nesneleri oluşturma.
  • Kimlik doğrulaması başarısız olursa 'sonuç yok' veya 'hata' döndürme.
  • Kullanıcılar kaynaklara erişmeye çalıştığında sınama ve yasak eylem yöntemlerine sahip olmak için:
    • Bunlara erişim yetkisi yoktur (yasakla).
    • Kimlik doğrulaması yapılmadığında (sınama).

RemoteAuthenticationHandler<TOptions> ve AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions>, bir uzak kimlik doğrulaması adımı gerektiren kimlik doğrulaması sınıfıdır. Uzaktan kimlik doğrulaması adımı tamamlandığında, işleyici, işleyici tarafından ayarlanan CallbackPath öğesi geri çağrılır. İşleyici, HandleRemoteAuthenticateAsync geri çağırma yoluna geçirilen bilgileri kullanarak kimlik doğrulaması adımını tamamlar. OAuth 2.0 ve OIDC’nin her ikisi de bu düzeni kullanır. JWT ve cookie'ler, kimlik doğrulaması için doğrudan taşıyıcı başlığını ve cookie öğesini kullanabildikleri için yapmazlar. Bu durumda uzaktan barındırılan sağlayıcı:

  • Kimlik doğrulaması sağlayıcısıdır.
  • Örnek olarak Facebook, Twitter, Google, Microsoft ve işleyiciler mekanizmasını kullanarak kullanıcıların kimliğini doğrulamayı işleyen diğer OIDC sağlayıcıları verilebilir.

Kimliği doğrula

Kimlik doğrulaması düzeninin kimlik doğrulaması eylemi, istek bağlamını temel alarak kullanıcının kimliğini oluşturmakla sorumludur. Kimlik doğrulamasının başarılı olup olmadığını ve başarılıysa kullanıcının kimliğini bir kimlik doğrulama biletinde gösteren bir AuthenticateResult döndürür. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:

  • cookie'lerden kullanıcının kimliğini oluşturan bir cookie kimlik doğrulaması düzeni.
  • Kullanıcının kimliğini oluşturmak için JWT taşıyıcı belirtecini seri durumdan çıkarma ve doğrulama JWT taşıyıcı düzeni.

Sınama

Kimliği doğrulanmamış bir kullanıcı kimlik doğrulaması gerektiren bir uç nokta istediğinde Yetkilendirme tarafından bir kimlik doğrulaması sınaması çağrılır. Örneğin, anonim bir kullanıcı kısıtlı bir kaynak istediğinde veya oturum açma bağlantısını izlediğinde bir kimlik doğrulaması sınaması verilir. Yetkilendirme, belirtilen kimlik doğrulaması düzenlerini veya belirtilmemişse varsayılanı kullanarak bir sınama çağırır. Bkz. ChallengeAsync. Kimlik doğrulaması sınaması örnekleri şunlardır:

  • Kullanıcıyı oturum açma sayfasına yönlendiren bir cookie kimlik doğrulaması düzeni.
  • www-authenticate: bearer üst bilgisini içeren 401 sonucunu döndüren bir JWT taşıyıcı düzeni.

Sınama eylemi, kullanıcıya istenen kaynağa erişmek için hangi kimlik doğrulaması mekanizmasının kullanılacağını bildirmelidir.

Yasaklama

Kimliği doğrulanmış bir kullanıcı erişim izni olmayan bir kaynağa erişmeye çalıştığında, kimlik doğrulaması düzeninin yasak eylemi Yetkilendirme tarafından çağrılır. Bkz. ForbidAsync. Kimlik doğrulaması yasak örnekleri şunlardır:

  • Kullanıcıyı erişimin yasaklandığını belirten bir sayfaya yönlendiren bir cookie kimlik doğrulaması düzeni.
  • 403 sonucunu döndüren bir JWT taşıyıcı düzeni.
  • Kullanıcının kaynağa erişim isteyebileceği bir sayfaya yeniden yönlendiren özel bir kimlik doğrulaması düzeni.

Yasaklanan bir eylem kullanıcıya şunları bildirir:

  • Kimliklerinin doğrulandığı.
  • İstenen kaynağa erişmelerine izin verilmediği.

Sınama ve yasak arasındaki farklar için aşağıdaki bağlantılara bakın:

Kiracı başına kimlik doğrulaması sağlayıcıları

ASP.NET Core çerçevesi, çok kiracılı kimlik doğrulaması için yerleşik bir çözüme sahip değildir. Müşterilerin çok kiracılı kimlik doğrulamasıyla uygulama yazması mümkün olsa da, çok kiracılı kimlik doğrulamasını destekleyen aşağıdaki asp.net temel uygulama çerçevelerinden birini kullanmanızı öneririz:

Orchard Core

Orchard Core. Kiracı başına kimlik doğrulaması sağlayıcıları örneği için, bkz. Orchard Core kaynağı.

ABP Çerçevesi

ABP Framework modülerlik, mikro hizmetler, etki alanı odaklı tasarım ve çok kiracılılık gibi çeşitli mimari desenleri destekler. Bkz. GitHub'da ABP Framework kaynağı.

Ek kaynaklar