Aracılığıyla paylaş


Uzaktan Kimlik Doğrulaması

System.Web bağdaştırıcılarının uzaktan kimlik doğrulama özelliği, ASP.NET Core uygulamasının ASP.NET bir uygulamaya erteleyerek kullanıcının kimliğini belirlemesine (HTTP isteğinin kimliğini doğrulamasına) olanak tanır. Özelliğin etkinleştirilmesi, ASP.NET uygulamasına, uç noktaya yapılan istekler için kimliği doğrulanmış kullanıcıyı temsil eden serileştirilmiş ClaimsPrincipal bir uç nokta döndüren bir uç nokta ekler. daha sonra ASP.NET Core uygulaması, ASP.NET uygulamasında bu uç noktayı çağırarak ve ASP.NET Core uygulaması tarafından alınan özgün istekten seçilen üst bilgileri ve cookieöğeleri geçirerek kullanıcının kimliğini belirleyecek (uzak kimlik doğrulaması etkin uç noktalar için) özel bir kimlik doğrulama işleyicisi kaydeder.

Yapılandırma

Başlarken'e göre ayarlanmış bir çözümde uzaktan kimlik doğrulamasını etkinleştirmek için gereken yalnızca birkaç küçük kod değişikliği vardır.

İlk olarak, ASP.NET Core ve ASP.NET uygulamalarını bağlamak için uzak uygulama kurulum yönergelerini izleyin. Ardından, uzak uygulama kimlik doğrulamasını etkinleştirmek için çağrılacak birkaç ek uzantı yöntemi vardır.

uygulama yapılandırmasını ASP.NET

kimlik doğrulama uç noktasını eklemek için ASP.NET uygulamasının yapılandırılması gerekir. Kimlik doğrulama uç noktasını ekleme işlemi, kimlik doğrulama uç noktasına yönelik istekleri izleyen HTTP modülünü ayarlamak için uzantı yöntemi çağrılarak AddAuthenticationServer yapılır. Kimlik doğrulamasıyla ilgili tüm yeniden yönlendirmelerin ASP.NET uygulama yerine ASP.NET Core uygulamasına doğru şekilde yönlendirilmesini sağlamak için, uzak kimlik doğrulama senaryolarının genellikle proxy desteği de eklemek istediğini unutmayın.

SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
    .AddProxySupport(options => options.UseForwardedHeaders = true)
    .AddRemoteAppServer(options =>
    {
        options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"];
    })
    .AddAuthenticationServer();

ASP.NET Core uygulama yapılandırması

Ardından ASP.NET Core uygulamasının, ASP.NET uygulamasına http isteğinde bulunarak kullanıcıların kimliğini doğrulayacak kimlik doğrulama işleyicisini etkinleştirecek şekilde yapılandırılması gerekir. Bu da System.Web adapters hizmetlerini kaydederken çağrılarak AddAuthenticationClient gerçekleştirilir:

builder.Services.AddSystemWebAdapters()
    .AddRemoteAppClient(options =>
    {
        options.RemoteAppUrl = new Uri(builder.Configuration
            ["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);
        options.ApiKey = builder.Configuration["RemoteAppApiKey"];
    })
    .AddAuthenticationClient(true);

Çağrıya geçirilen boole değeri, uzak uygulama kimlik doğrulamasının AddAuthenticationClient varsayılan kimlik doğrulama düzeni olup olmayacağını belirtir. true Geçiş, kullanıcının tüm istekler için uzak uygulama kimlik doğrulaması yoluyla kimliğinin doğrulanmasına neden olurken, geçişfalse, kullanıcının yalnızca uzak uygulama düzeni özel olarak istenirse (örneğin, bir denetleyicide veya eylem yönteminde) uzak uygulama kimlik doğrulamasıyla [Authorize(AuthenticationSchemes = RemoteAppAuthenticationDefaults.AuthenticationScheme)] kimliğinin doğrulanacağı anlamına gelir. Bu parametre için false geçişi, yalnızca uzak uygulama kimlik doğrulaması gerektiren ancak uzak uygulama kimlik doğrulaması kullanacaklarını belirtmek üzere tüm bu uç noktalara açıklama ekleme dezavantajı olan uç noktalar için kimlik doğrulaması için özgün ASP.NET uygulamasına HTTP istekleri gönderme avantajına sahiptir.

Boole gerektirmeye ek olarak, uzak kimlik doğrulama işleminin davranışının diğer bazı yönlerini değiştirmek için AddAuthenticationClient isteğe bağlı bir geri çağırma geçirilebilir:

  • RequestHeadersToForward: Bu özellik, kimlik doğrulaması API'sini çağırırken istekten iletilmesi gereken üst bilgileri içerir. Varsayılan olarak, yalnızca ve Cookieüst bilgileri iletilirAuthorization. Ek üst bilgiler bu listeye eklenerek iletilebilir. Alternatif olarak, liste temizlenirse (üst bilgi belirtilmezse), tüm üst bilgiler iletilir.
  • ResponseHeadersToForward: Bu özellik, kimliğin zorlandığı senaryolarda kimlik doğrulaması isteyen özgün çağrıya kimlik doğrulaması isteğinden geri yayılması gereken yanıt üst bilgilerini listeler. Varsayılan olarak, bu , Set-Cookieve WWW-Authenticate üst bilgilerini içerirLocation.
  • AuthenticationEndpointPath: kimlik doğrulaması isteklerinin yapılması gereken ASP.NET uygulamasındaki uç nokta. Bu varsayılan olarak /systemweb-adapters/authenticate kullanılır ve ASP.NET kimlik doğrulaması uç noktası yapılandırmasında belirtilen uç noktayla eşleşmelidir.

Son olarak, ASP.NET Core uygulaması daha önce kimlik doğrulama ara yazılımı içermiyorsa, bunun etkinleştirilmesi gerekir (ara yazılımı yönlendirdikten sonra ancak yetkilendirme ara yazılımından önce):

app.UseAuthentication();

Tasarla

  1. İstekler ASP.NET Core uygulaması tarafından işlendiğinde, uzak uygulama kimlik doğrulaması varsayılan düzense veya isteğin uç noktası tarafından belirtilmişse, RemoteAuthenticationAuthHandler kullanıcının kimliğini doğrulamayı dener.
    1. İşleyici, ASP.NET uygulamasının kimlik doğrulama uç noktasına bir HTTP isteğinde bulunur. Geçerli istekteki yapılandırılmış üst bilgileri, kimlik doğrulamasıyla ilgili verileri iletmek için bu yeni isteğe kopyalar. Yukarıda belirtildiği gibi, varsayılan davranış ve Cookie üst bilgilerini kopyalamaktırAuthorize. API anahtarı üst bilgisi de güvenlik amacıyla eklenir.
  2. ASP.NET uygulaması, kimlik doğrulama uç noktasına gönderilen istekleri sağlar. API anahtarları eşleştikçe, ASP.NET uygulaması geçerli kullanıcının ClaimsPrincipal yanıt gövdesinde serileştirilmiş durumunu döndürür veya bir HTTP durum kodu (401 veya 302 gibi) ve hataya işaret eden yanıt üst bilgileri döndürür.
  3. ASP.NET Core uygulaması RemoteAuthenticationAuthHandler yanıtı ASP.NET uygulamasından aldığında:
    1. ClaimsPrincipal başarıyla döndürülürse, kimlik doğrulama işleyicisi seri durumdan çıkarılır ve geçerli kullanıcının kimliği olarak kullanılır.
    2. ClaimsPrincipal başarıyla döndürülmezse işleyici sonucu depolar ve kimlik doğrulaması zorlanırsa (örneğin kullanıcı korumalı bir kaynağa eriştiği için), isteğin yanıtı kimlik doğrulama uç noktasından gelen yanıttan alınan durum kodu ve seçili yanıt üst bilgileriyle güncelleştirilir. Bu, sınama yanıtlarının (oturum açma sayfasına yönlendirmeler gibi) son kullanıcılara yayılmasını sağlar.
      1. ASP.NET uygulamasının kimlik doğrulama uç noktasından elde edilen sonuçlar bu uç noktaya özgü veriler içerebileceğinden, kullanıcılar uygulamaları kullanılmadan önce tüm kimlik doğrulama sonuçlarında çalışacak ASP.NET Core uygulamasına kaydedebilir IRemoteAuthenticationResultProcessor . Örneğin, yerleşik IRemoteAuthenticationResultProcessorRedirectUrlProcessor olan, kimlik doğrulama uç noktasından döndürülen yanıt üst bilgilerini arar Location ve doğrudan ASP.NET uygulamasını değil ASP.NET Core uygulamasının konağına yeniden yönlendirilmesini sağlar.

Bilinen sınırlamalar

Bu uzaktan kimlik doğrulama yaklaşımının bilinen bazı sınırlamaları vardır:

  1. Windows kimlik doğrulaması bir Windows kimliğinin tanıtıcısına bağlı olduğundan, Windows kimlik doğrulaması bu özellik tarafından desteklenmez. Paylaşılan Windows kimlik doğrulamasının nasıl çalışabileceğini keşfetmek için gelecekteki çalışmalar planlanıyor. Daha fazla bilgi için bkz . dotnet/systemweb-adapters#246 .
  2. Bu özellik, ASP.NET Core uygulamasının ASP.NET uygulaması tarafından kimliği doğrulanmış bir kimliği kullanmasını sağlar, ancak kullanıcılarla ilgili tüm eylemlerin (oturum açma, oturumu kapatma vb.) ASP.NET uygulaması üzerinden yönlendirilmesi gerekir.

Alternatifler

ASP.NET uygulamasında kimlik doğrulaması, Kimlik Doğrulama Ara Yazılımı kullanılarak Microsoft.OwinCookie yapılırsa, kimlik paylaşımına alternatif bir çözüm ASP.NET ve ASP.NET Core uygulamalarını bir kimlik doğrulamasını cookiepaylaşabilecekleri şekilde yapılandırmaktır. Kimlik doğrulaması cookie paylaşımı şunları sağlar:

  • Aynı cookieuygulamasından kullanıcı kimliğini belirlemek için her iki uygulama da.
  • Bir uygulamada oturum açma veya kapatma, kullanıcının diğer uygulamada oturum açmasını veya kapatmasını ister.

Oturum açma genellikle belirli bir veritabanına bağlı olduğundan tüm kimlik doğrulama işlevlerinin her iki uygulamada da çalışmayacağını unutmayın:

  • Kullanıcıların, ASP.NET veya ASP.NET Core uygulaması (veritabanı hangi veritabanıyla çalışacak şekilde ayarlanırsa) uygulamalardan yalnızca biri aracılığıyla oturum açması gerekir.
  • Her iki uygulama da kullanıcıların kimliğini ve taleplerini görebilir.
  • Her iki uygulama da kullanıcının oturumunu kapatabiliyor.

ASP.NET ve ASP.NET Core uygulamaları arasında paylaşım kimlik doğrulamalarını cookieyapılandırmayla ilgili ayrıntılar, paylaşım belgelerinde cookiebulunabilir. System.Web bağdaştırıcıları GitHub deposundaki aşağıdaki örnekler, her iki uygulamanın da kullanıcıları oturum açmasına ve kapatmasına olanak tanıyan paylaşılan cookie yapılandırma ile uzak uygulama kimlik doğrulamasını gösterir:

Kimlik doğrulamasının paylaşılması, aşağıdakilerin her ikisi de doğruysa iyi bir seçenektir:

  • ASP.NET uygulaması zaten kimlik doğrulaması kullanıyor Microsoft.Owincookie .
  • eşleşen veri koruma ayarlarını kullanmak için ASP.NET uygulamasını ve ASP.NET Core uygulamalarını güncelleştirmek mümkündür. Eşleşen paylaşılan veri koruma ayarları paylaşılan bir dosya yolu, Redis önbelleği veya veri koruma anahtarlarını depolamak için Azure Blob Depolama içerir.

Diğer senaryolarda, bu belgede daha önce açıklanan uzaktan kimlik doğrulama yaklaşımı daha esnektir ve büyük olasılıkla daha uygundur.