Kimlik doğrulamasına ASP.NET Core genel bakış
Mike Rousos tarafından
Kimlik doğrulaması, kullanıcının kimliğini belirleme işlemidir. Yetkilendirme, kullanıcının bir kaynağa erişimi olup olmadığını belirleme işlemidir. Bu ASP.NET Core, kimlik doğrulama ara yazılımı IAuthenticationService tarafından kullanılan tarafından kullanılmaktadır. Kimlik doğrulama hizmeti, kimlik doğrulamasıyla ilgili eylemleri tamamlamak için kayıtlı kimlik doğrulama işleyicilerini kullanır. Kimlik doğrulamasıyla ilgili eylemlerin örnekleri şunlardır:
- Kullanıcının kimlik doğrulama.
- Kimliği doğrulanmamış bir kullanıcı kısıtlanmış bir kaynağa erişmeye çalıştığında yanıt verme.
Kayıtlı kimlik doğrulama işleyicileri ve yapılandırma seçenekleri "şemalar" olarak adlandırılan bir seçenektir.
Kimlik doğrulama düzenleri, içinde kimlik doğrulama hizmetleri kaydederek Startup.ConfigureServices belirtilir:
- çağrısının ardından şemaya özgü bir genişletme yöntemi
services.AddAuthenticationçağırarak (örneğin veyaAddJwtBearerAddCookiegibi). Bu uzantı yöntemleri, düzenleri uygun ayarlarla kaydetmek için AuthenticationBuilder.AddScheme kullanır. - AuthenticationBuilder.AddScheme'yi doğrudan çağırarak daha az yaygındır.
Örneğin, aşağıdaki kod ve JWT taşıyıcı kimlik doğrulama düzenleri için kimlik cookie doğrulama hizmetlerini ve işleyicilerini kaydettirmektedir:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => Configuration.Bind("JwtSettings", options))
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => Configuration.Bind("CookieSettings", options));
AddAuthenticationparametresi, JwtBearerDefaults.AuthenticationScheme belirli bir düzen istenirken varsayılan olarak kullanmak üzere şemanın 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ı olduğu kimlik doğrulama düzenini (veya düzenlerini) belirte bir şekilde kullanılabilir. Yukarıdaki örnekte, kimlik doğrulama düzeni adını belirterek kullanılabilir ( varsayılan olarak, ancak çağrılırken cookie CookieAuthenticationDefaults.AuthenticationScheme farklı bir ad AddCookie sağlanmıştır).
Bazı durumlarda çağrısı diğer AddAuthentication uzantı yöntemleri tarafından otomatik olarak yapılır. Örneğin, kullanırken ASP.NET Core Identity AddAuthentication dahili olarak çağrılır.
Kimlik doğrulaması ara yazılımı, Startup.Configure uygulamanın üzerinde UseAuthentication uzantı yöntemi çağrılarak IApplicationBuilder eklenir. çağrısı, UseAuthentication önceden kaydedilmiş kimlik doğrulama düzenlerini kullanan ara yazılımı kaydettirmektedir. Kullanıcıların UseAuthentication kimlik doğrulamasına bağlı herhangi bir ara yazılımdan önce çağrısı. Uç nokta yönlendirmesi kullanılırken UseAuthentication çağrısının şu şekilde olması gerekir:
- 'den
UseRoutingsonra, kimlik doğrulaması kararları için yönlendirme bilgileri kullanılabilir. - 'den
UseEndpointsönce, kullanıcıların uç noktalara erişmeden önce kimlikleri doğrulanır.
Kimlik doğrulaması kavramları
Kimlik doğrulaması, izin kararları almak ClaimsPrincipal için yetkilendirme sağlamakla sorumludur. Doğru talepler kümesi oluşturmakla sorumlu kimlik doğrulama işleyicisini seçmek için birden çok kimlik doğrulama düzeni yaklaşımı vardır:
- Kimlik doğrulama düzeni
- Varsayılan kimlik doğrulama düzeni, sonraki bölümde ele alınmıştır.
- Doğrudan olarak HttpContext.User ayarlayın.
Şemaların otomatik yoklama özelliği yoktur. Varsayılan düzen belirtilmezse, şema yetkilendirme özniteliğinde belirtilmelidir, aksi takdirde aşağıdaki hata oluştu:
InvalidOperationException: AuthenticationScheme belirtilmedi ve DefaultAuthenticateScheme bulunamadı. Varsayılan şemalar AddAuthentication(string defaultScheme) veya AddAuthentication(Action <AuthenticationOptions> configureOptions) kullanılarak ayarlanır.
Kimlik doğrulama düzeni
Kimlik doğrulama düzeni, hangi kimlik doğrulama işleyicinin doğru talep kümesi oluşturmakla sorumlu olduğunu seçer. Daha fazla bilgi için bkz. Belirli bir şemayla yetkilendirme.
Kimlik doğrulama düzeni, şu adlara karşılık gelen bir addır:
- Kimlik doğrulama işleyicisi.
- İşleyicinin bu belirli örneğini yapılandırma seçenekleri.
Şemalar, ilişkili işleyicinin kimlik doğrulaması, zorluk ve yasak davranışlarına başvuran bir mekanizma olarak yararlıdır. Örneğin, bir yetkilendirme ilkesi, kullanıcının kimliğini doğrulamak için hangi kimlik doğrulama düzeninin (veya şemaların) kullan gerektiğini belirtmek için şema adlarını kullanabilir. Kimlik doğrulamasını yapılandırarak varsayılan kimlik doğrulama düzenini belirtmeniz yaygın bir durum olabilir. Bir kaynak belirli bir şemaya istekte olmadığı sürece varsayılan düzen kullanılır. Şunları da yapmak mümkündür:
- Kimlik doğrulaması, zorluk ve yasak eylemleri için kullanmak üzere farklı varsayılan şemalar belirtin.
- İlke şemalarını kullanarak birden çok düzeni tek bir düzende birleştirin.
Kimlik doğrulama işleyicisi
Kimlik doğrulama işleyicisi:
- Bir düzenin davranışını uygulayan bir tür.
- veya IAuthenticationHandler AuthenticationHandler<TOptions> türetilen.
- Kullanıcıların kimliğini doğrulamak birincil sorumluluktur.
Kimlik doğrulama şemasının yapılandırmasına ve gelen istek bağlamına bağlı olarak, kimlik doğrulama işleyicileri:
- Kimlik AuthenticationTicket doğrulaması başarılı olursa kullanıcının kimliğini temsil eden nesneler oluşturun.
- Kimlik doğrulaması başarısız olursa "sonuç yok" veya "hata" olarak sonuç verir.
- Kullanıcılar kaynaklara erişmeye çalışırken zorluk ve yasak eylemleri için yöntemleriniz vardır:
- Erişim iznine sahip değillerdir (yasak).
- Kimlikleri doğrulanmamış olduğunda (zorluk).
RemoteAuthenticationHandler<TOptions> Vs AuthenticationHandler<TOptions>
RemoteAuthenticationHandler<TOptions> , uzaktan kimlik doğrulama adımı gerektiren kimlik doğrulaması sınıfıdır. Uzak kimlik doğrulama adımı tamamlandığında işleyici, işleyici tarafından CallbackPath kümeye geri çağrılır. İşleyici, geri çağırma yoluna geçirilen bilgileri kullanarak kimlik doğrulama HandleRemoteAuthenticateAsync adımını tamamlar. Hem OAuth 2.0 hem de OIDC bu düzeni kullanır. JWT ve cookie s, yalnızca taşıyıcı üst bilgi ve kimlik doğrulaması için doğrudan kullanabileceği için cookie bunu sağlamaz. Bu durumda uzaktan barındırılan sağlayıcı:
- Kimlik doğrulama sağlayıcısıdır.
- Örnek olarak Facebook, Twitter, Google, Microsoftve işleyici mekanizmasını kullanarak kullanıcıların kimlik doğrulamalarını yapan diğer OIDC sağlayıcıları yer almaktadır.
Kimlik doğrulaması
Kimlik doğrulama şemasının kimlik doğrulama eylemi, istek bağlamına göre kullanıcının kimliğini oluşturmakla sorumludur. Kimlik doğrulamasının başarılı olup olmadığını ve başarılı olursa bir AuthenticateResult kimlik doğrulama biletinde kullanıcının kimliğini belirten bir döndürür. Bkz. AuthenticateAsync. Kimlik doğrulaması örnekleri şunlardır:
- Kullanıcının cookie kimliğini 'den oluşturmak için bir kimlik doğrulama cookie şeması.
- Kullanıcının kimliğini oluşturmak için bir JWT taşıyıcı belirteci, bir JWT taşıyıcı belirteci için deserializing ve validating bir JWT taşıyıcı düzeni.
Sınama
Kimliği doğrulanmamış bir kullanıcı kimlik doğrulaması gerektiren bir uç nokta isteğinda olduğunda Yetkilendirme tarafından bir kimlik doğrulaması zorlandı. Örneğin anonim bir kullanıcı kısıtlanmış bir kaynak isteği veya oturum açma bağlantısına tıkladığında kimlik doğrulaması zorlanır. Yetkilendirme, belirtilen kimlik doğrulama düzenlerini kullanarak bir zorluk veya belirtilmemişse varsayılanı çağırır. Bkz. ChallengeAsync. Kimlik doğrulaması zorluk örnekleri şunlardır:
- Kullanıcı cookie bir oturum açma sayfasına yeniden yönlendiren bir kimlik doğrulama düzeni.
- Üst bilgi ile 401 sonucu döndüren JWT taşıyıcı
www-authenticate: bearerdüzeni.
Bir zorluk eylemi, kullanıcıya istenen kaynağa erişmek için hangi kimlik doğrulama mekanizmasını kullandıracaklarını haber ver versin.
Koru -sun
Kimlik doğrulama şemasının yasaklanan eylemi, kimliği doğrulanmış bir kullanıcı erişim izni verilmeden bir kaynağa erişmeye çalışırsa Yetkilendirme tarafından çağrılır. Bkz. ForbidAsync. Kimlik doğrulaması yasak örnekleri şunlardır:
- Kullanıcının cookie erişimin yasak olduğunu belirten bir sayfaya yönlendiren bir kimlik doğrulama şeması.
- 403 sonucu döndüren JWT taşıyıcı düzeni.
- Kullanıcının kaynağa erişim isteğide buluna bir sayfaya yönlendiren özel kimlik doğrulama düzeni.
Yasak eylemi kullanıcıya şunları haber velisi olabilir:
- Kimlikleri doğrulanır.
- İstenen kaynağa erişmelerine izin verilmez.
Zorluk ve yasak arasındaki farklar için aşağıdaki bağlantılara bakın:
Kiracı başına kimlik doğrulama sağlayıcıları
ASP.NET Core framework 'te çok kiracılı kimlik doğrulaması için yerleşik bir çözüm yoktur. Müşterilerin, yerleşik özellikleri kullanarak bir tane yazabilmesi kesinlikle mümkün olsa da, müşterilerin bu amaçla daha fazla çekirdeğe bakmalarını öneririz.
Orchard Core:
- ASP.NET Core ile oluşturulan açık kaynaklı modüler ve çok kiracılı bir uygulama çerçevesi.
- Bu uygulama çerçevesinin üzerine inşa edilen bir içerik yönetim sistemi (CMS).
Kiracı başına kimlik doğrulama sağlayıcılarının bir örneği için bkz. Orchard Core kaynağı.