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 bir ASP.NET uygulamasına erteleyerek kullanıcının identity 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 tanımlama bilgilerini geçirerek kullanıcının kimliğini belirleyecek özel bir identity 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 veCookie
ü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, kimlik doğrulama isteğinden, zorlandığı senaryolarda identity kimlik doğrulaması isteyen özgün çağrıya geri yayılması gereken yanıt üst bilgilerini listeler. Varsayılan olarak, bu ,Set-Cookie
veWWW-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();
Tasarlama
- İ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.- İş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.
- İş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
- 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.
- ASP.NET Core uygulaması
RemoteAuthenticationAuthHandler
yanıtı ASP.NET uygulamasından aldığında:- ClaimsPrincipal başarıyla döndürüldüyse, kimlik doğrulama işleyicisi seri durumdan çıkarılır ve geçerli kullanıcının identityolarak kullanılır.
- 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.
- 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şikIRemoteAuthenticationResultProcessor
RedirectUrlProcessor
olan, kimlik doğrulama uç noktasından döndürülen yanıt üst bilgilerini ararLocation
ve doğrudan ASP.NET uygulamasını değil ASP.NET Core uygulamasının konağına yeniden yönlendirilmesini sağlar.
- 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
Bilinen sınırlamalar
Bu uzaktan kimlik doğrulama yaklaşımının bilinen bazı sınırlamaları vardır:
- Windows kimlik doğrulaması bir Windows identitytanı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 .
- Bu özellik, ASP.NET Core uygulamasının ASP.NET uygulaması tarafından kimliği doğrulanmış bir identity uygulamayı kullanmasına olanak tanır, 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.Owin
Cookie yapılırsa, paylaşıma identity 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:
- Kullanıcıyı aynı cookieuygulamasından identity 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 identity ve talepleri 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ğrulaması tanımlama bilgilerini yapılandırma hakkındaki 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.Owin
cookie . - 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.
ASP.NET Core