ASP.NET Core kimlik doğrulamasına genel bakış
Yayınlayan Mike Rousos
Kimlik doğrulaması, kullanıcının değerini belirleme işlemidir identity. 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:
- AddJwtBearer veya AddCookie gibi bir AddAuthentication çağrısının ardından düzene özgü bir uzantı yöntemi çağırarak. Bu uzantı yöntemleri, düzenleri uygun ayarlarla kaydetmek için AuthenticationBuilder.AddScheme kullanır.
- Daha az yaygın olan, doğrudan
AuthenticationBuilder.AddScheme
çağrısı yapmaktır.
Ö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:
- Kimlik doğrulaması düzeni
- Sonraki iki bölümde ele alınan varsayılan kimlik doğrulama düzeni.
- HttpContext.User öğesini doğrudan ayarlayın.
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:
- otomatik olarak olarak DefaultSchemekullanılır.
- veya AddAuthenticationCore(IServiceCollection)değerini belirtme gereksinimini
DefaultScheme
AddAuthentication(IServiceCollection) ortadan kaldırır.
Tek kimlik doğrulama düzenini kullanarak otomatik olarak DefaultScheme
devre 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:
- Bir düzenin davranışını uygulayan bir türdür.
- IAuthenticationHandler veya AuthenticationHandler<TOptions> öğesinden türetilir.
- Kullanıcıların kimliğini doğrulama birincil sorumluluğuna sahiptir.
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ınkileri identity temsil eden nesneler oluşturmaAuthenticationTicket.
- 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. Doğrudan taşıyıcı üst bilgisini ve kimlik doğrulamasını kullanabildiğinden JWT ve cookie tanımlama bilgileri kullanılamaz. 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ğrulama düzeninin kimlik doğrulama eylemi, istek bağlamını temel alarak kullanıcının identity 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 kimlik doğrulama biletinde olduğunu identity belirten bir döndürürAuthenticateResult. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:
- cookie Tanımlama bilgilerinden kullanıcının identity kimlik doğrulama düzenini oluşturur.
- Kullanıcının identityoluş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
- ASP.NET Core'de belirli bir desenle yetkilendirme
- ASP.NET Core'da ilke desenleri
- Kullanıcı verilerinin yetkilendirme tarafından korunduğu bir ASP.NET Core uygulaması oluşturma
- Genel olarak kimliği doğrulanmış kullanıcılar gerektir
- Birden çok kimlik doğrulaması düzeni kullanma ile ilgili GitHub sorunu
Yayınlayan Mike Rousos
Kimlik doğrulaması, kullanıcının değerini belirleme işlemidir identity. 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:
- AddJwtBearer veya AddCookie gibi bir AddAuthentication çağrısının ardından düzene özgü bir uzantı yöntemi çağırarak. Bu uzantı yöntemleri, düzenleri uygun ayarlarla kaydetmek için AuthenticationBuilder.AddScheme kullanır.
- Daha az yaygın olan, doğrudan
AuthenticationBuilder.AddScheme
çağrısı yapmaktır.
Ö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:
- Kimlik doğrulaması düzeni
- Sonraki bölümde ele alınan varsayılan kimlik doğrulaması düzeni.
- HttpContext.User öğesini doğrudan ayarlayın.
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:
- Bir düzenin davranışını uygulayan bir türdür.
- IAuthenticationHandler veya AuthenticationHandler<TOptions> öğesinden türetilir.
- Kullanıcıların kimliğini doğrulama birincil sorumluluğuna sahiptir.
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ınkileri identity temsil eden nesneler oluşturmaAuthenticationTicket.
- 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. Doğrudan taşıyıcı üst bilgisini ve kimlik doğrulamasını kullanabildiğinden JWT ve cookie tanımlama bilgileri kullanılamaz. 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ğrulama düzeninin kimlik doğrulama eylemi, istek bağlamını temel alarak kullanıcının identity 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 kimlik doğrulama biletinde olduğunu identity belirten bir döndürürAuthenticateResult. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:
- cookie Tanımlama bilgilerinden kullanıcının identity kimlik doğrulama düzenini oluşturur.
- Kullanıcının identityoluş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
- ASP.NET Core'de belirli bir desenle yetkilendirme
- ASP.NET Core'da ilke desenleri
- Kullanıcı verilerinin yetkilendirme tarafından korunduğu bir ASP.NET Core uygulaması oluşturma
- Genel olarak kimliği doğrulanmış kullanıcılar gerektir
- Birden çok kimlik doğrulaması düzeni kullanma ile ilgili GitHub sorunu
Yayınlayan Mike Rousos
Kimlik doğrulaması, kullanıcının değerini belirleme işlemidir identity. 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:
- AddAuthentication çağrısının ardından şemaya özgü bir uzantı yöntemi çağırarak (örneğin, AddJwtBearer veya AddCookie gibi). Bu uzantı yöntemleri, düzenleri uygun ayarlarla kaydetmek için AuthenticationBuilder.AddScheme kullanır.
- Daha az yaygın olan, doğrudan
AuthenticationBuilder.AddScheme
çağrısı yapmaktır.
Ö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:
- Kimlik doğrulaması düzeni
- Sonraki bölümde ele alınan varsayılan kimlik doğrulaması düzeni.
- HttpContext.User öğesini doğrudan ayarlayın.
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:
- Bir düzenin davranışını uygulayan bir türdür.
- IAuthenticationHandler veya AuthenticationHandler<TOptions> öğesinden türetilir.
- Kullanıcıların kimliğini doğrulama birincil sorumluluğuna sahiptir.
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ınkileri identity temsil eden nesneler oluşturmaAuthenticationTicket.
- 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. Doğrudan taşıyıcı üst bilgisini ve kimlik doğrulamasını kullanabildiğinden JWT ve cookie tanımlama bilgileri kullanılamaz. 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ğrulama düzeninin kimlik doğrulama eylemi, istek bağlamını temel alarak kullanıcının identity 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 kimlik doğrulama biletinde olduğunu identity belirten bir döndürürAuthenticateResult. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:
- cookie Tanımlama bilgilerinden kullanıcının identity kimlik doğrulama düzenini oluşturur.
- Kullanıcının identityoluş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
- ASP.NET Core'de belirli bir desenle yetkilendirme
- ASP.NET Core'da ilke desenleri
- Kullanıcı verilerinin yetkilendirme tarafından korunduğu bir ASP.NET Core uygulaması oluşturma
- Genel olarak kimliği doğrulanmış kullanıcılar gerektir
- Birden çok kimlik doğrulaması düzeni kullanma ile ilgili GitHub sorunu
ASP.NET Core