Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yayımlayanlar Rick Anderson ve Kirk Larkin
Windows Kimlik Doğrulaması (Negotiate, Kerberos veya NTLM kimlik doğrulaması olarak da bilinir), IIS ile, Kestrel veya HTTP.sys ile barındırılan ASP.NET Core uygulamaları için yapılandırılabilir.
Windows Kimlik Doğrulaması, ASP.NET Core uygulamalarının kullanıcılarının kimliğini doğrulamak için işletim sistemine dayanır. Windows Kimlik Doğrulaması, kullanıcıları tanımlamak için Active Directory etki alanı kimliklerini veya Windows hesaplarını kullanan bir şirket ağında çalışan sunucular için kullanılır. Windows Kimlik Doğrulaması, kullanıcıların, istemci uygulamalarının ve web sunucularının aynı Windows etki alanına ait olduğu intranet ortamlarına en uygun olanıdır.
Windows Kimlik Doğrulaması ne zaman kullanılır?
Windows Kimlik Doğrulaması, bir kuruluşun özel iç ağı içinde çalışan ve yalnızca aynı ağ içindeki çalışanlar (ve diğer yetkili kullanıcılar) tarafından erişilebilen web uygulamaları için uygundur. Kullanıcı yönetimi Active Directory (AD) içinde yapılır ve kullanıcılar kimlik doğrulaması için mevcut Windows etki alanı hesabını kullanır.
Windows Kimlik Doğrulaması intranet uygulamaları için çeşitli avantajlar sağlar:
- Sorunsuz kullanıcı deneyimi - Kullanıcıların kimlikleri etkin Windows oturumlarına göre otomatik olarak doğrulanır veya standart bir tarayıcı iletişim kutusu aracılığıyla Windows kimlik bilgilerini girmeleri istenir.
- Active Directory ile tümleştirme - Kullanıcı grupları, hesap kilitlemeleri ve çok faktörlü kimlik doğrulaması (MFA) dahil olmak üzere mevcut Windows altyapısını ve güvenlik ilkelerini kullanır.
- Güvenli kimlik bilgisi işleme - Kimlik doğrulaması, Ayrı kullanıcı kimlik bilgilerini yönetmeye gerek olmadan Kerberos gibi güvenli protokoller aracılığıyla işlenir.
- Rol tabanlı yetkilendirme - Uygulamalar Active Directory'den kullanıcı ve grup bilgilerine erişebilir ve uygulama içinde rol tabanlı erişim denetimini (RBAC) etkinleştirir.
- Azaltılmış yönetim yükü - Ayrı bir kullanıcı veritabanı veya kimlik bilgisi yönetim sistemi bulundurmanız gerekmez.
Bu, Windows Kimlik Doğrulaması'nın intranet portalları gibi mevcut Windows altyapılarını kullanmak isteyen kuruluşlar için ideal olmasını sağlar.
Note
Windows Kimlik Doğrulaması HTTP/2 ile desteklenmez. Kimlik doğrulama zorlukları HTTP/2 yanıtları üzerinden gönderilse de, istemcinin kimlik doğrulama işlemini tamamlamak için HTTP/1.1'e düşürmesi gerekir. Bu bir protokol sınırlamasıdır, Windows Kimlik Doğrulaması'nın kullanımdan kaldırılması değildir. Kimlik doğrulaması yaptıktan sonra, normal HTTP/2 iletişimi sonraki istekler için devam edebilir.
Genel kullanıma yönelik uygulamalar için güvenlik ve kullanılabilirlik endişeleri nedeniyle Windows Kimlik Doğrulaması önerilmez. Bu nedenler şunlardır:
- Windows Kimlik Doğrulaması, Active Directory'yi korumak için en iyi şekilde dahili tutulur ve bir iç ağ dışında açığa çıkarıldığında güvenlik riskleri ortaya çıkar.
- Dış kullanıcıların Windows etki alanı hesapları yoktur.
- Gerekli ağ altyapısını güvenli bir şekilde yapılandırmak karmaşıktır ve güvenlik duvarları veya proxy'ler kimlik doğrulama işlemini etkileyebilir.
- Platformlar arası değildir ve tasarımlar ve kullanıcı deneyimleri için özelleştirme seçenekleri sağlamaz.
Farklı senaryolar için alternatifler
Uygulama gereksinimlerinize bağlı olarak şu alternatifleri göz önünde bulundurun:
Genel kullanıma yönelik uygulamalar için:
- Dış kimlik sağlayıcılarıyla OpenID Connect
- Yerel kullanıcı hesaplarıyla ASP.NET Core Identity (ASP.NET Core'da Identity Giriş)
- Microsoft 365 ortamları için Azure Active Directory (AAD)
Hem intranet hem de dış kullanıcıları olan karma ortamlar için:
- OpenID Connect ile Active Directory Federasyon Hizmetleri (ADFS)
- Karma yapılandırma ile Azure Active Directory
Modern kimlik doğrulaması kullanan kurumsal ortamlar için:
- Çoklu oturum açma ile Azure Active Directory
- Üçüncü taraf kimlik sağlayıcılarıyla SAML tabanlı çözümler
Ara sunucu ve yük dengeleyici senaryoları
Windows Kimlik Doğrulaması, öncelikle intranette kullanılan ve bir proxy veya yük dengeleyicinin genellikle istemciler ile sunucular arasındaki trafiği işlemediği, durum bilgisi gerektiren bir senaryodur. Ara sunucu veya yük dengeleyici kullanılıyorsa, Windows Kimlik Doğrulaması yalnızca ara sunucu veya yük dengeleyici belirli koşulları karşılarsa çalışır.
- Kimlik doğrulamasını işler.
- Kullanıcı kimlik doğrulama bilgilerini uygulamaya geçirir (örneğin, bir istek üst bilgisinde) ve uygulama bu kimlik doğrulama bilgilerini kullanarak harekete geçer.
Ara sunucuların ve yük dengeleyicilerin kullanıldığı ortamlarda Windows Kimlik Doğrulaması'na alternatif olarak OpenID Connect (OIDC) ile Active Directory Federasyon Hizmetleri (ADFS) kullanılır.
IIS/IIS Express
Microsoft.AspNetCore.Authentication.Negotiate
using Microsoft.AspNetCore.Authentication.Negotiate;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
ASP.NET Core Razor Sayfalar şablonu, Windows Kimlik Doğrulaması belirtilerek yukarıdaki kodu oluşturmuştur.
Başlatma ayarları (hata ayıklayıcı)
Başlatma ayarları yapılandırması yalnızca IIS Express dosyasını etkiler Properties/launchSettings.json ve Windows Kimlik Doğrulaması için IIS'yi yapılandırmaz. Sunucu yapılandırması IIS bölümünde açıklanmıştır.
Visual Studio veya .NET CLI aracılığıyla kullanılabilen Web Uygulaması şablonları, dosyayı otomatik olarak güncelleştiren Windows Kimlik Doğrulamasını Properties/launchSettings.json destekleyecek şekilde yapılandırılabilir.
Yeni proje
Yeni Razor bir Sayfalar veya MVC uygulaması oluşturun. Ek bilgiler iletişim kutusunda Kimlik doğrulama türünü Windows olarak ayarlayın.
Uygulamayı çalıştırma. Kullanıcı adı, işlenen uygulamanın kullanıcı arabiriminde görünür.
Mevcut proje
Projenin özellikleri Windows Kimlik Doğrulaması'nı etkinleştirir ve Anonim Kimlik Doğrulamasını devre dışı bırakır. Başlatma profilleri iletişim kutusunu açın:
- Çözüm Gezgini'nde projeye sağ tıklayın ve Özellikler paneli öğesini seçin.
- Hata Ayıklama Genel sekmesini seçin ve Hata ayıklama başlatma profilleri kullanıcı arayüzünü aç'ı seçin.
- Anonim Kimlik Doğrulamasını Etkinleştir onay kutusunu temizleyin.
- Windows Kimlik Doğrulamasını Etkinleştir onay kutusunu seçin.
Alternatif olarak, özellikler launchSettings.json dosyasının iisSettings düğümünde yapılandırılabilir.
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:52171/",
"sslPort": 44308
}
}
IIS
IIS, ASP.NET Core uygulamalarını barındırmak için ASP.NET Core Modülünü kullanır. Windows Kimlik Doğrulaması, web.config dosyası aracılığıyla IIS için yapılandırılır. Aşağıdaki bölümlerde nasıl yapılır gösterilmektedir:
- Uygulama dağıtıldığında sunucuda Windows Kimlik Doğrulamasını etkinleştiren yerel bir web.config dosyası sağlayın.
- Sunucuya zaten dağıtılmış olan bir ASP.NET Core uygulamasının web.config dosyasını yapılandırmak için IIS Yöneticisi'ni kullanın.
Henüz yapmadıysanız, ASP.NET Core uygulamalarını barındırmak için IIS'yi etkinleştirin. Daha fazla bilgi için bkz ASP.NET Core'u Windows'ta IIS ile barındırma.
Windows Kimlik Doğrulaması için IIS Rol Hizmeti'ni etkinleştirin. Daha fazla bilgi için bkz . IIS Rol Hizmetleri'nde Windows Kimlik Doğrulamasını Etkinleştirme (bkz. Adım 2).
IIS Tümleştirme Ara Yazılımı , isteklerin kimliğini varsayılan olarak otomatik olarak doğrulayarak yapılandırılır. Daha fazla bilgi için bkz. Windows üzerinde IIS ile ASP.NET Core barındırma: IIS seçenekleri (AutomaticAuthentication).
ASP.NET Çekirdek Modülü, Windows Kimlik Doğrulama belirtecini varsayılan olarak uygulamaya iletecek şekilde yapılandırılır. Daha fazla bilgi için bkz . ASP.NET Çekirdek Modülü yapılandırma başvurusu: aspNetCore öğesinin öznitelikleri.
Aşağıdaki yaklaşımlardan birini kullanın:
Projeyi yayımlamadan ve dağıtmadan önce aşağıdaki web.config dosyasını proje köküne ekleyin:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer> </location> </configuration>Proje .NET SDK'sı tarafından yayımlandığında ve özellik proje dosyasında
<IsTransformWebConfigDisabled>olaraktrueayarlanmadan web.config dosyası,<location><system.webServer><security><authentication>bölümünü içerir. özelliği hakkında<IsTransformWebConfigDisabled>daha fazla bilgi için bkz. web.config dosyası.Projeyi yayımladıktan ve dağıttığınızda IIS Yöneticisi ile sunucu tarafı yapılandırma gerçekleştirin:
- IIS Yöneticisi'nde, Bağlantılar kenar çubuğunun Siteler düğümü altındaki IIS sitesini seçin.
- IIS alanında Kimlik Doğrulaması'na çift tıklayın.
- Anonim Kimlik Doğrulaması'ı seçin. Eylemlerkenar çubuğunda Devre Dışı Bırak'ı seçin.
- Windows Kimlik Doğrulaması'ı seçin. Eylemler kenar çubuğunda Etkinleştir'i seçin.
Bu eylemler gerçekleştirildiğinde, IIS Yöneticisi uygulamanın web.config dosyasını değiştirir.
<system.webServer><security><authentication>düğümü,anonymousAuthenticationvewindowsAuthenticationiçin güncellenmiş ayarlarla eklenir.<system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer><system.webServer>IIS Yöneticisi tarafından web.config dosyasına eklenen bölüm, uygulama yayımlandığında .NET SDK tarafından eklenen uygulamanın<location>bölümünün dışındadır. Bölüm<location>düğümünün dışına eklendiğinden, ayarlar mevcut uygulamayla ilişkili herhangi bir alt uygulama tarafından devralınır. Devralmayı önlemek için, eklenen<security>bölümü .NET SDK'sının<location><system.webServer>sağladığı bölümün içine taşıyın.IIS yapılandırmasını eklemek için IIS Yöneticisi kullanıldığında, yalnızca uygulamanın sunucudaki web.config dosyasını etkiler. Sunucunun web.config kopyası projenin web.config dosyasıyla değiştirilirse, uygulamanın sonraki dağıtımı sunucudaki ayarların üzerine yazabilir. Ayarları yönetmek için aşağıdaki yaklaşımlardan birini kullanın:
- Dağıtımda dosyanın üzerine yazılmasının ardından web.config dosyasındaki ayarları sıfırlamak için IIS Yöneticisi'ni kullanın.
- Ayarlarla uygulamaya yerel olarak bir web.config dosyası ekleyin.
Kestrel
Microsoft.AspNetCore.Authentication.Negotiate NuGet paketi, Windows, Linux ve macOS üzerinde Negotiate ve Kerberos kullanarak Windows Kimlik Doğrulamasını etkinleştirmek için ile Kestrel birlikte kullanılabilir.
Warning
Kimlik bilgileri bir bağlantıdaki istekler arasında kalıcı hale gelebilir. Proxy ile 1:1 bağlantı yakınlığı (kalıcı bir bağlantı) korunmadığı sürece, Negotiate kimlik doğrulaması proxy'lerle Kestrelkullanılmamalıdır.
Note
Negotiate işleyicisi, temel sunucunun Windows Kimlik Doğrulamasını yerel olarak destekleyip desteklemediğini ve etkinleştirilip etkinleştirilmediğini algılar. Sunucu Windows Kimlik Doğrulaması'nı destekliyorsa ancak devre dışı bırakıldıysa, sunucu uygulamasını etkinleştirmenizi isteyen bir hata oluşur. Sunucuda Windows Kimlik Doğrulaması etkinleştirildiğinde, Anlaşma işleyicisi kimlik doğrulama isteklerini ona saydam bir şekilde iletir.
Kimlik doğrulaması ve yedek yetkilendirme ilkesi, Program.cs içinde aşağıda vurgulanan kod tarafından etkinleştirilir.
using Microsoft.AspNetCore.Authentication.Negotiate;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Yukarıdaki kod, Windows Kimlik Doğrulaması belirtilen ASP.NET Core Razor Sayfalar şablonu tarafından oluşturulmuştur.
Vurgulanan çizgiler:
- 5-6: AddAuthentication ve AddNegotiate Negotiate kimlik doğrulaması işleyicisini kaydedip yapılandırın.
- 8-11: AddAuthorization Geri dönüş ilkesiyle, kimliği doğrulanmış kullanıcıları varsayılan olarak zorlar.
- 26: UseAuthentication Her istek için kimlik doğrulama işleyicilerini yürütür ve HttpContext.User'i doldurur.
- 27: UseAuthorization Geri dönüş ilkesi de dahil olmak üzere yetkilendirme ilkelerini değerlendirir.
Note
AddAuthentication ve AddNegotiate Anlaşma işleyicisini kaydeder ve yapılandırır; bu, istek başına kimlik doğrulaması çalıştırmaz. Kimlik doğrulama ara yazılımı (UseAuthentication), işleyiciyi çağırır ve HttpContext.User doldurur, ve ilke değerlendirmesinin çalışması için UseAuthorization'den önce görünmelidir.
Kerberos kimlik doğrulaması ve rol tabanlı erişim denetimi (RBAC)
Linux veya macOS'ta Kerberos kimlik doğrulaması, kimliği doğrulanmış bir kullanıcı için herhangi bir rol bilgisi sağlamaz. Kerberos kullanıcısına rol ve grup bilgileri eklemek için, kimlik doğrulama işleyicisinin rolleri bir LDAP etki alanından alacak şekilde yapılandırılması gerekir. En temel yapılandırma yalnızca sorgulamak için bir LDAP etki alanı belirtir ve KIMLIĞI doğrulanmış kullanıcının bağlamını kullanarak LDAP etki alanını sorgular:
using Microsoft.AspNetCore.Authentication.Negotiate;
using System.Runtime.InteropServices;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate(options =>
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
options.EnableLdap("contoso.com");
}
});
Bazı yapılandırmalar LDAP etki alanını sorgulamak için belirli kimlik bilgileri gerektirebilir. Kimlik bilgileri aşağıdaki vurgulanmış seçeneklerde belirtilebilir:
using Microsoft.AspNetCore.Authentication.Negotiate;
using System.Runtime.InteropServices;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate(options =>
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
options.EnableLdap(settings =>
{
settings.Domain = "contoso.com";
settings.MachineAccountName = "machineName";
settings.MachineAccountPassword =
builder.Configuration["Password"];
});
}
});
builder.Services.AddRazorPages();
Varsayılan olarak, anlaşma kimlik doğrulaması işleyicisi iç içe etki alanlarını çözümler. Büyük veya karmaşık bir LDAP ortamında iç içe etki alanlarını çözümlemek, yavaş arama veya her kullanıcı için çok fazla bellek kullanılmasına neden olabilir.
IgnoreNestedGroups seçeneği kullanılarak iç içe etki alanı çözümlemesi devre dışı bırakılabilir.
Anonim isteklere izin verilir. Kimlik doğrulaması için anonim isteklere meydan okumak için ASP.NET Çekirdek Yetkilendirme'yi kullanın.
Windows ortamı yapılandırması
API, Microsoft.AspNetCore.Authentication.NegotiateKullanıcı Modu kimlik doğrulaması gerçekleştirir. Hizmet Asıl Adları (SPN) makine hesabına değil hizmeti çalıştıran kullanıcı hesabına eklenmelidir. Yönetici komut kabuğunda setspn -S HTTP/myservername.mydomain.com myuser komutunu çalıştırın.
Kerberos ile NTLM karşılaştırması
ASP.NET Core'daki
using Microsoft.AspNetCore.Authentication.Negotiate;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();
var app = builder.Build();
NegotiateDefaults.AuthenticationScheme varsayılan olduğundan Kerberos'un adını belirtir.
IIS, IISExpress ve Kestrel hem Kerberos hem de NTLM'yi destekler.
WWW-Authenticate: üst bilgisini IIS veya IISExpress kullanarak Fiddler gibi bir araçla incelemek, ya Negotiate ya da NTLM'yi gösterir.
Kestrel sadece WWW-Authenticate: Negotiate gösterir
Üst WWW-Authenticate: Negotiate bilgi, sunucunun NTLM veya Kerberos kullanabileceği anlamına gelir.
Kestrel, Negotiate üst bilgi ön ekini gerektirir; istek veya yanıt kimlik doğrulama üst bilgilerinde NTLM doğrudan belirtilemeyi desteklemez. NTLM, Kestrel içinde desteklenmektedir, ancak Negotiate şeklinde gönderilmelidir.
Kestrel üzerinde, NTLM veya Kerberos'un kullanılıp kullanılmadığını görmek için Base64 üst bilgisini çözümleyin. Bu, ya NTLM ya da HTTP gösterir.
HTTP Kerberos'un kullanıldığını gösterir.
Linux ve macOS ortam yapılandırması
Linux veya macOS makinesini bir Windows etki alanına ekleme yönergeleri, Windows kimlik doğrulamasını kullanarak Azure Data Studio'yu SQL Server'ınıza bağlama - Kerberos makalesinde bulunabilir. Yönergeler, etki alanındaki Linux makinesi için bir makine hesabı oluşturur. SPN'ler bu makine hesabına eklenmelidir.
Note
Azure Data Studio'yu Windows kimlik doğrulaması - Kerberos kullanarak SQL Server'ınıza bağlama makalesindeki yönergeleri takip ederken, gerekirse python-software-properties değerini python3-software-properties ile değiştirin.
Linux veya macOS makinesi etki alanına katıldıktan sonra SPN'lerle bir anahtar sekmesi dosyası sağlamak için ek adımlar gerekir:
- Etki alanı denetleyicisinde makine hesabına yeni web hizmeti SPN'leri ekleyin:
setspn -S HTTP/mywebservice.mydomain.com mymachinesetspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
- Anahtar sekmesi dosyası oluşturmak için ktpass kullanın:
ktpass -princ HTTP/mywebservice.mydomain.com@MYDOMAIN.COM -pass myKeyTabFilePassword -mapuser MYDOMAIN\mymachine$ -pType KRB5_NT_PRINCIPAL -out c:\temp\mymachine.HTTP.keytab -crypto AES256-SHA1- Bazı alanlar belirtildiği gibi büyük harfle belirtilmelidir.
- Anahtar sekmesi dosyasını Linux veya macOS makinesine kopyalayın.
- Bir ortam değişkeni aracılığıyla tuş sekmesi dosyasını seçin:
export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab - Şu anda kullanılabilir durumdaki SPN'leri göstermek için çağırın
klist.
Note
Anahtar sekmesi dosyası etki alanı erişim kimlik bilgilerini içerir ve buna göre korunmalıdır.
HTTP.sys
HTTP.sysÇekirdek Modu Windows Kimlik Doğrulamayı, Negotiate, NTLM veya Basic kimlik doğrulaması kullanarak destekler.
Aşağıdaki kod kimlik doğrulaması ekler ve uygulamanın web konağını Windows Kimlik Doğrulaması ile HTTP.sys kullanacak şekilde yapılandırılır:
using Microsoft.AspNetCore.Server.HttpSys;
using System.Runtime.InteropServices;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
builder.WebHost.UseHttpSys(options =>
{
options.Authentication.Schemes =
AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.Authentication.AllowAnonymous = false;
});
}
Note
HTTP.sys, Kerberos kimlik doğrulama protokolüyle Çekirdek Modu kimlik doğrulamasına yetki verir. Kullanıcı Modu kimlik doğrulaması Kerberos ve HTTP.sys ile desteklenmez. Makine hesabı, Active Directory'den alınan ve istemci tarafından kullanıcının kimliğini doğrulamak üzere sunucuya iletilen Kerberos belirtecinin/anahtarının şifresini çözmek için kullanılmalıdır. Konak için ve uygulamanın kullanıcısı değil, Hizmet Asıl Adı'nı (SPN) kaydedin.
Tip
Windows kimlik doğrulamasını HTTPS üzerinden daha fazla korumak için kanal bağlama belirteci (CBT) sağlamlaştırmayı etkinleştirmeyi göz önünde bulundurun. Ayrıntılar için bkz . Kanal bağlama belirtecini (CBT) sağlamlaştırmayı etkinleştirme.
Note
nano sunucu sürüm 1709 veya sonraki sürümlerde HTTP.sys desteklenmez. Nano Sunucu ile Windows Kimlik Doğrulaması ve HTTP.sys kullanmak için sunucu çekirdeği (microsoft/windowsservercore) kapsayıcısı kullanın (bkz https://hub.docker.com/_/microsoft-windows-servercore. ). Sunucu Çekirdeği hakkında daha fazla bilgi için bkz . Windows Server'da Sunucu Çekirdeği yükleme seçeneği nedir?.
Kullanıcıları yetkilendirme
Anonim erişimin yapılandırma durumu, uygulamada [Authorize] ve [AllowAnonymous] özniteliklerinin nasıl kullanılacağını belirler. Aşağıdaki iki bölümde anonim erişimin izin verilmeyen ve izin verilen yapılandırma durumlarının nasıl işleneceğini açıklanmaktadır.
Anonim erişime izin verme
Windows Kimlik Doğrulaması etkinleştirildiğinde ve anonim erişim devre dışı bırakıldığında [Authorize] ve [AllowAnonymous] özniteliklerinin hiçbir etkisi olmaz. Bir IIS sitesi anonim erişime izin vermeyen bir şekilde yapılandırılmışsa, istek hiçbir zaman uygulamaya ulaşmaz. Bu nedenle özniteliği [AllowAnonymous] geçerli değildir.
Anonim erişime izin ver
Hem Windows Kimlik Doğrulaması hem de anonim erişim etkinleştirildiğinde [Authorize] ve [AllowAnonymous] özniteliklerini kullanın. özniteliği, [Authorize] uygulamanın kimlik doğrulaması gerektiren uç noktalarının güvenliğini sağlamanızı sağlar.
[AllowAnonymous] özniteliği, anonim erişime izin veren uygulamalarda [Authorize] özniteliğini geçersiz kılar. Öznitelik kullanımı ayrıntıları için bkz . ASP.NET Core'da basit yetkilendirme.
Note
Varsayılan olarak, bir sayfaya erişim yetkisi olmayan kullanıcılara boş bir HTTP 403 yanıtı sunulur. StatusCodePages Ara Yazılımı, kullanıcılara daha iyi bir "Erişim Reddedildi" deneyimi sağlayacak şekilde yapılandırılabilir.
Impersonation
ASP.NET Core kimliğe bürünme uygulamaz. Uygulamalar, tüm isteklerde uygulamanın kimliğiyle, uygulama havuzu kimliğini veya işlem kimliğini kullanarak çalışır. Uygulamanın bir kullanıcı adına bir eylem gerçekleştirmesi gerekiyorsa, bunu WindowsIdentity.RunImpersonated içindeki RunImpersonatedAsync'da veya Program.cs kullanarak yapın. Bu bağlamda tek bir eylem çalıştırın ve bağlamı kapatın.
app.Run(async (context) =>
{
try
{
var user = (WindowsIdentity)context.User.Identity!;
await context.Response
.WriteAsync($"User: {user.Name}\tState: {user.ImpersonationLevel}\n");
await WindowsIdentity.RunImpersonatedAsync(user.AccessToken, async () =>
{
var impersonatedUser = WindowsIdentity.GetCurrent();
var message =
$"User: {impersonatedUser.Name}\t" +
$"State: {impersonatedUser.ImpersonationLevel}";
var bytes = Encoding.UTF8.GetBytes(message);
await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
});
}
catch (Exception e)
{
await context.Response.WriteAsync(e.ToString());
}
});
Microsoft.AspNetCore.Authentication.Negotiate Paket Windows, Linux ve macOS'ta kimlik doğrulamasını etkinleştirse de, kimliğe bürünme yalnızca Windows'ta desteklenir.
Talep dönüştürmeleri
IIS ile barındırırken, AuthenticateAsync bir kullanıcıyı başlatmak için dahili olarak çağrılmaz. Bu nedenle, her kimlik doğrulamasından sonra talepleri dönüştürmek için kullanılan bir IClaimsTransformation uygulama varsayılan olarak etkinleştirilmez. Daha fazla bilgi ve hak taleplerini dönüştürmeleri etkinleştiren bir kod örneği için bkz: İşlem içi ve işlem dışı barındırma arasındaki farklar.
Ek kaynaklar
Windows Kimlik Doğrulaması (Negotiate, Kerberos veya NTLM kimlik doğrulaması olarak da bilinir), IIS, Kestrel veya HTTP.sys ile barındırılan ASP.NET Core uygulamaları için yapılandırılabilir.
Windows Kimlik Doğrulaması, ASP.NET Core uygulamalarının kullanıcılarının kimliğini doğrulamak için işletim sistemine dayanır. Sunucunuz, kullanıcıları tanımlamak için Active Directory etki alanı kimliklerini veya Windows hesaplarını kullanarak bir şirket ağında çalıştığında Windows Kimlik Doğrulamasını kullanabilirsiniz. Windows Kimlik Doğrulaması, kullanıcıların, istemci uygulamalarının ve web sunucularının aynı Windows etki alanına ait olduğu intranet ortamlarına en uygun olanıdır.
Windows Kimlik Doğrulaması ne zaman kullanılır?
Windows Kimlik Doğrulaması, bir kuruluşun özel iç ağı içinde çalışan ve yalnızca aynı ağ içindeki çalışanlar (ve diğer yetkili kullanıcılar) tarafından erişilebilen web uygulamaları için uygundur. Kullanıcı yönetimi Active Directory (AD) içinde yapılır ve kullanıcılar kimlik doğrulaması için mevcut Windows etki alanı hesabını kullanır.
Windows Kimlik Doğrulaması intranet uygulamaları için çeşitli avantajlar sağlar:
- Sorunsuz kullanıcı deneyimi - Kullanıcıların kimlikleri etkin Windows oturumlarına göre otomatik olarak doğrulanır veya standart bir tarayıcı iletişim kutusu aracılığıyla Windows kimlik bilgilerini girmeleri istenir.
- Active Directory ile tümleştirme - Kullanıcı grupları, hesap kilitlemeleri ve çok faktörlü kimlik doğrulaması (MFA) dahil olmak üzere mevcut Windows altyapısını ve güvenlik ilkelerini kullanır.
- Güvenli kimlik bilgisi işleme - Kimlik doğrulaması, Ayrı kullanıcı kimlik bilgilerini yönetmeye gerek olmadan Kerberos gibi güvenli protokoller aracılığıyla işlenir.
- Rol tabanlı yetkilendirme - Uygulamalar Active Directory'den kullanıcı ve grup bilgilerine erişebilir ve uygulama içinde rol tabanlı erişim denetimini (RBAC) etkinleştirir.
- Azaltılmış yönetim yükü - Ayrı bir kullanıcı veritabanı veya kimlik bilgisi yönetim sistemi bulundurmanız gerekmez.
Bu, Windows Kimlik Doğrulaması'nın intranet portalları gibi mevcut Windows altyapılarını kullanmak isteyen kuruluşlar için ideal olmasını sağlar.
Note
Windows Kimlik Doğrulaması HTTP/2 ile desteklenmez. Kimlik doğrulama zorlukları HTTP/2 yanıtları üzerinden gönderilse de, istemcinin kimlik doğrulama işlemini tamamlamak için HTTP/1.1'e düşürmesi gerekir. Bu bir protokol sınırlamasıdır, Windows Kimlik Doğrulaması'nın kullanımdan kaldırılması değildir. Kimlik doğrulaması yaptıktan sonra, normal HTTP/2 iletişimi sonraki istekler için devam edebilir.
Genel kullanıma yönelik uygulamalar için güvenlik ve kullanılabilirlik endişeleri nedeniyle Windows Kimlik Doğrulaması önerilmez. Bu nedenler şunlardır:
- Windows Kimlik Doğrulaması, Active Directory'yi korumak için en iyi şekilde dahili tutulur ve bir iç ağ dışında açığa çıkarıldığında güvenlik riskleri ortaya çıkar.
- Dış kullanıcıların Windows etki alanı hesapları yoktur.
- Gerekli ağ altyapısını güvenli bir şekilde yapılandırmak karmaşıktır ve güvenlik duvarları veya proxy'ler kimlik doğrulama işlemini etkileyebilir.
- Platformlar arası değildir ve tasarımlar ve kullanıcı deneyimleri için özelleştirme seçenekleri sağlamaz.
Farklı senaryolar için alternatifler
Uygulama gereksinimlerinize bağlı olarak şu alternatifleri göz önünde bulundurun:
Genel kullanıma yönelik uygulamalar için:
- Dış kimlik sağlayıcılarıyla OpenID Connect
- Yerel kullanıcı hesaplarıyla ASP.NET Core Identity (ASP.NET Core'da Identity Giriş)
- Microsoft 365 ortamları için Azure Active Directory (AAD)
Hem intranet hem de dış kullanıcıları olan karma ortamlar için:
- OpenID Connect ile Active Directory Federasyon Hizmetleri (ADFS)
- Karma yapılandırma ile Azure Active Directory
Modern kimlik doğrulaması kullanan kurumsal ortamlar için:
- Çoklu oturum açma ile Azure Active Directory
- Üçüncü taraf kimlik sağlayıcılarıyla SAML tabanlı çözümler
Ara sunucu ve yük dengeleyici senaryoları
Windows Kimlik Doğrulaması, öncelikle intranette kullanılan ve bir ara sunucunun veya yük dengeleyicinin genellikle istemciler ve sunucular arasındaki trafiği işlemediği durum bilgisi olan bir senaryodur. Ara sunucu veya yük dengeleyici kullanılıyorsa, Windows Kimlik Doğrulaması sadece ara sunucu veya yük dengeleyici belirli şartları sağlıyorsa çalışır.
- Kimlik doğrulamasını işler.
- Kullanıcı kimlik doğrulama bilgilerini uygulamaya geçirir (örneğin, bir istek üst bilgisinde) ve uygulama bu kimlik doğrulama bilgilerini kullanarak harekete geçer.
Ara sunucuların ve yük dengeleyicilerin kullanıldığı ortamlarda Windows Kimlik Doğrulaması'na alternatif olarak OpenID Connect (OIDC) ile Active Directory Federasyon Hizmetleri (ADFS) kullanılır.
IIS/IIS Express
Startup.ConfigureServices içinde AddAuthentication ad alanındaki Microsoft.AspNetCore.Server.IISIntegration kullanarak kimlik doğrulama hizmetleri ekleyin:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Başlatma ayarları (hata ayıklayıcı)
Başlatma ayarları yapılandırması yalnızca IIS Express dosyasını etkiler Properties/launchSettings.json ve Windows Kimlik Doğrulaması için IIS'yi yapılandırmaz. Sunucu yapılandırması IIS bölümünde açıklanmıştır.
Visual Studio veya .NET CLI aracılığıyla kullanılabilen Web Uygulaması şablonu, dosyayı otomatik olarak güncelleştiren Windows Kimlik Doğrulamasını Properties/launchSettings.json destekleyecek şekilde yapılandırılabilir.
Yeni proje
- Yeni bir proje oluşturma.
- ASP.NET Çekirdek Web Uygulaması'nı seçin. sonrakiseçin.
- Proje adı alanına bir ad girin. Konum girişinin doğru olduğunu onaylayın veya proje için bir konum belirtin. Oluştur'i seçin.
- Kimlik Doğrulaması'nın altında Değiştir'iseçin.
- Kimlik Doğrulamasını Değiştir penceresinde Windows Kimlik Doğrulaması'nı seçin. Tamam'ı seçin.
- Web Uygulaması'nı seçin.
- Oluştur'i seçin.
Uygulamayı çalıştırma. Kullanıcı adı, işlenen uygulamanın kullanıcı arabiriminde görünür.
Mevcut proje
Projenin özellikleri Windows Kimlik Doğrulaması'nı etkinleştirir ve Anonim Kimlik Doğrulamasını devre dışı bırakır:
- Çözüm Gezgini'da projeye sağ tıklayın ve Özellikler'i seçin.
- Hata Ayıklama sekmesini seçin.
- Anonim Kimlik Doğrulamasını Etkinleştir onay kutusunu temizleyin.
- Windows Kimlik Doğrulamasını Etkinleştir onay kutusunu seçin.
- Özellik sayfasını kaydedin ve kapatın.
Alternatif olarak, özellikler launchSettings.json dosyasının iisSettings düğümünde yapılandırılabilir.
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:52171/",
"sslPort": 44308
}
}
Mevcut bir projeyi değiştirirken, proje dosyasının meta paket veya NuGet paketi içinMicrosoft.AspNetCore.App bir paket başvurusu içerdiğini Microsoft.AspNetCore.Authenticationonaylayın.
IIS
IIS, ASP.NET Core uygulamalarını barındırmak için ASP.NET Core Modülünü kullanır. Windows Kimlik Doğrulaması, web.config dosyası aracılığıyla IIS için yapılandırılır. Aşağıdaki bölümlerde nasıl yapılır gösterilmektedir:
- Uygulama dağıtıldığında sunucuda Windows Kimlik Doğrulamasını etkinleştiren yerel bir web.config dosyası sağlayın.
- Sunucuya zaten dağıtılmış olan bir ASP.NET Core uygulamasının web.config dosyasını yapılandırmak için IIS Yöneticisi'ni kullanın.
Henüz yapmadıysanız, ASP.NET Core uygulamalarını barındırmak için IIS'yi etkinleştirin. Daha fazla bilgi için bkz ASP.NET Core'u Windows'ta IIS ile barındırma.
Windows Kimlik Doğrulaması için IIS Rol Hizmeti'ni etkinleştirin. Daha fazla bilgi için bkz . IIS Rol Hizmetleri'nde Windows Kimlik Doğrulamasını Etkinleştirme (bkz. Adım 2).
IIS Tümleştirme Ara Yazılımı , isteklerin kimliğini varsayılan olarak otomatik olarak doğrulayarak yapılandırılır. Daha fazla bilgi için bkz. Windows üzerinde IIS ile ASP.NET Core barındırma: IIS seçenekleri (AutomaticAuthentication).
ASP.NET Çekirdek Modülü, Windows Kimlik Doğrulama belirtecini varsayılan olarak uygulamaya iletecek şekilde yapılandırılır. Daha fazla bilgi için bkz . ASP.NET Çekirdek Modülü yapılandırma başvurusu: aspNetCore öğesinin öznitelikleri.
Aşağıdaki yaklaşımlardan birini kullanın:
Projeyi yayımlamadan ve dağıtmadan önce aşağıdaki web.config dosyasını proje köküne ekleyin:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer> </location> </configuration>Proje .NET SDK'sı tarafından yayımlandığında ve özellik proje dosyasında
<IsTransformWebConfigDisabled>olaraktrueayarlanmadan web.config dosyası,<location><system.webServer><security><authentication>bölümünü içerir. özelliğihakkında daha fazla bilgi için "Windows'ta IIS ile ASP.NET Core'u Barındırma" konusuna bakınız . Projeyi yayımladıktan ve dağıttığınızda IIS Yöneticisi ile sunucu tarafı yapılandırma gerçekleştirin:
- IIS Yöneticisi'nde, Bağlantılar kenar çubuğunun Siteler düğümü altındaki IIS sitesini seçin.
- IIS alanında Kimlik Doğrulaması'na çift tıklayın.
- Anonim Kimlik Doğrulaması'ı seçin. Eylemlerkenar çubuğunda Devre Dışı Bırak'ı seçin.
- Windows Kimlik Doğrulaması'ı seçin. Eylemler kenar çubuğunda Etkinleştir'i seçin.
Bu eylemler gerçekleştirildiğinde, IIS Yöneticisi uygulamanın web.config dosyasını değiştirir.
<system.webServer><security><authentication>veanonymousAuthenticationiçinwindowsAuthenticationgüncelleştirilmiş ayarlarla bir düğüm eklenir:<system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer><system.webServer>IIS Yöneticisi tarafından web.config dosyasına eklenen bölüm, uygulama yayımlandığında .NET SDK tarafından eklenen uygulamanın<location>bölümünün dışındadır. Bölüm<location>düğümünün dışına eklendiğinden, ayarlar geçerli uygulamaya herhangi bir alt uygulama için devralınır. Devralmayı önlemek için, eklenen<security>bölümü .NET SDK'sının<location><system.webServer>sağladığı bölümün içine taşıyın.IIS yapılandırmasını eklemek için IIS Yöneticisi kullanıldığında, yalnızca uygulamanın sunucudaki web.config dosyasını etkiler. Eğer sunucudaki web.config dosyası, projenin web.config dosyasıyla değiştirilirse, uygulamanın sonraki yaygınlaştırması sunucudaki ayarların üzerine yazabilir. Ayarları yönetmek için aşağıdaki yaklaşımlardan birini kullanın:
- Dağıtımda dosya üzerine yazıldıktan sonra web.config dosyasındaki ayarları sıfırlamak için IIS Yöneticisi'ni kullanın.
- Ayarlarla uygulamaya yerel olarak bir web.config dosyası ekleyin.
Kestrel
Microsoft.AspNetCore.Authentication.Negotiate NuGet paketi, Windows, Linux ve macOS üzerinde Negotiate ve Kerberos kullanarak Windows Kimlik Doğrulamasını desteklemek için ile Kestrel birlikte kullanılabilir.
Warning
Kimlik bilgileri bir bağlantıdaki istekler arasında kalıcı hale gelebilir. Proxy ile 1:1 bağlantı benzeşimini (kalıcı bir bağlantı) korumadığı sürece müzakere kimlik doğrulaması proxy'lerle Kestrelkullanılmamalıdır.
Note
Negotiate işleyicisi, temel sunucunun Windows Kimlik Doğrulamasını yerel olarak destekleyip desteklemediğini ve etkinleştirilip etkinleştirilmediğini algılar. Sunucu Windows Kimlik Doğrulaması'nı destekliyorsa ancak devre dışı bırakıldıysa, sunucu uygulamasını etkinleştirmenizi isteyen bir hata oluşur. Sunucuda Windows Kimlik Doğrulaması etkinleştirildiğinde, Anlaşma işleyicisi kimlik doğrulama isteklerini ona saydam bir şekilde iletir.
AddAuthentication ve AddNegotiate öğesini Startup.ConfigureServices içinde çağırarak kimlik doğrulama hizmetleri ekleyin.
// using Microsoft.AspNetCore.Authentication.Negotiate;
// using Microsoft.Extensions.DependencyInjection;
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
UseAuthentication kullanarak Startup.Configure'de Kimlik Doğrulama Ara Yazılımı ekleyin.
app.UseAuthentication();
Ara yazılım hakkında daha fazla bilgi için bkz . ASP.NET Core Ara Yazılımı.
Kerberos kimlik doğrulaması ve rol tabanlı erişim denetimi (RBAC)
Linux veya macOS'ta Kerberos kimlik doğrulaması, kimliği doğrulanmış bir kullanıcı için herhangi bir rol bilgisi sağlamaz. Kerberos kullanıcısına rol ve grup bilgileri eklemek için, kimlik doğrulama işleyicisinin rolleri bir LDAP etki alanından alacak şekilde yapılandırılması gerekir. En temel yapılandırma yalnızca sorgulanacak bir LDAP etki alanını belirtir ve LDAP etki alanını sorgulamak için kimliği doğrulanmış kullanıcının bağlamını kullanır:
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate(options =>
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
options.EnableLdap("contoso.com");
}
});
Bazı yapılandırmalar LDAP etki alanını sorgulamak için belirli kimlik bilgileri gerektirebilir. Kimlik bilgileri aşağıdaki vurgulanmış seçeneklerde belirtilebilir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate(options =>
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
options.EnableLdap(settings =>
{
settings.Domain = "contoso.com";
settings.MachineAccountName = "machineName";
settings.MachineAccountPassword = Configuration["Password"]
});
}
});
services.AddRazorPages();
}
Varsayılan olarak, müzakere kimlik doğrulama işleyicisi iç içe etki alanlarını çözümler. Büyük veya karmaşık bir LDAP ortamında iç içe etki alanlarını çözümlemek, yavaş arama veya her kullanıcı için çok fazla bellek kullanılmasına neden olabilir. İç içe etki alanı çözümleme seçeneği kullanılarak IgnoreNestedGroups devre dışı bırakılabilir.
Anonim isteklere izin verilir. Kimlik doğrulaması için anonim isteklere meydan okumak için ASP.NET Çekirdek Yetkilendirme'yi kullanın.
AuthenticationScheme
Microsoft.AspNetCore.Authentication.Negotiate NuGet paketini gerektirir.
Windows ortamı yapılandırması
API, Microsoft.AspNetCore.Authentication.NegotiateKullanıcı Modu kimlik doğrulaması gerçekleştirir. Hizmet Asıl Adları (SPN) makine hesabına değil hizmeti çalıştıran kullanıcı hesabına eklenmelidir. Yönetici olarak bir komut kabuğunda setspn -S HTTP/myservername.mydomain.com myuser yürütün.
Linux ve macOS ortam yapılandırması
Linux veya macOS makinesini bir Windows etki alanına ekleme yönergeleri, Windows kimlik doğrulamasını kullanarak Azure Data Studio'yu SQL Server'ınıza bağlama - Kerberos makalesinde bulunabilir. Yönergeler, etki alanındaki Linux makinesi için bir makine hesabı oluşturur. SPN'ler bu makine hesabına eklenmelidir.
Note
Azure Data Studio'yu Windows kimlik doğrulaması - Kerberos kullanarak SQL Server'ınıza bağlama makalesindeki yönergeleri takip ederken, gerekirse python-software-properties ile python3-software-properties değiştirin.
Linux veya macOS makinesi etki alanına katıldıktan sonra SPN'lerle bir anahtar sekmesi dosyası sağlamak için ek adımlar gerekir:
- Etki alanı denetleyicisinde makine hesabına yeni web hizmeti SPN'leri ekleyin:
setspn -S HTTP/mywebservice.mydomain.com mymachinesetspn -S HTTP/mywebservice@MYDOMAIN.COM mymachine
- Anahtar sekmesi dosyası oluşturmak için ktpass kullanın:
ktpass -princ HTTP/mywebservice.mydomain.com@MYDOMAIN.COM -pass myKeyTabFilePassword -mapuser MYDOMAIN\mymachine$ -pType KRB5_NT_PRINCIPAL -out c:\temp\mymachine.HTTP.keytab -crypto AES256-SHA1- Bazı alanlar belirtildiği gibi büyük harfle belirtilmelidir.
- Anahtar sekmesi dosyasını Linux veya macOS makinesine kopyalayın.
- Bir ortam değişkeni aracılığıyla tuş sekmesi dosyasını seçin:
export KRB5_KTNAME=/tmp/mymachine.HTTP.keytab - Şu anda kullanılabilir durumdaki SPN'leri göstermek için çağırın
klist.
Note
Anahtar sekmesi dosyası etki alanı erişim kimlik bilgilerini içerir ve buna göre korunmalıdır.
HTTP.sys
HTTP.sys, Negotiate, NTLM veya Basic kimlik doğrulaması kullanarak Çekirdek Modu Windows Kimlik Doğrulamasını destekler.
Startup.ConfigureServices içinde AddAuthentication ad alanındaki Microsoft.AspNetCore.Server.HttpSys kullanarak kimlik doğrulama hizmetleri ekleyin:
services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);
Uygulamanın web konağını Windows Kimlik Doğrulaması (Program.cs) ile HTTP.sys kullanacak şekilde yapılandırın.
UseHttpSys
Microsoft.AspNetCore.Server.HttpSys ad alanındadır.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseHttpSys(options =>
{
options.Authentication.Schemes =
AuthenticationSchemes.NTLM |
AuthenticationSchemes.Negotiate;
options.Authentication.AllowAnonymous = false;
});
});
}
Note
HTTP.sys, Kerberos kimlik doğrulama protokolü ile Çekirdek Modu kimlik doğrulamasını devralır. Kullanıcı Modu kimlik doğrulaması Kerberos ve HTTP.sys ile desteklenmez. Makine hesabı, Active Directory'den alınan ve istemci tarafından kullanıcının kimliğini doğrulamak üzere sunucuya iletilen Kerberos belirtecinin/anahtarının şifresini çözmek için kullanılmalıdır. Konak için, uygulamanın kullanıcısı yerine Hizmet Asıl Adı'nı (SPN) kaydedin.
Note
nano sunucu sürüm 1709 veya sonraki sürümlerde HTTP.sys desteklenmez. Nano Sunucu ile Windows Kimlik Doğrulaması ve HTTP.sys kullanmak için sunucu çekirdeği (microsoft/windowsservercore) kapsayıcısı kullanın (bkz https://hub.docker.com/_/microsoft-windows-servercore. ). Sunucu Çekirdeği hakkında daha fazla bilgi için bkz . Windows Server'da Sunucu Çekirdeği yükleme seçeneği nedir?.
Kullanıcıları yetkilendirme
Anonim erişim yapılandırma durumu, [Authorize] ve [AllowAnonymous] özniteliklerinin uygulamada nasıl kullanılacağını belirler. Aşağıdaki iki bölümde anonim erişimin izin verilmeyen ve izin verilen yapılandırma durumlarının nasıl işleneceğini açıklanmaktadır.
Anonim erişime izin verme
Windows Kimlik Doğrulaması etkinleştirildiğinde ve anonim erişim devre dışı bırakıldığında [Authorize] ve [AllowAnonymous] özniteliklerinin hiçbir etkisi olmaz. Bir IIS sitesi anonim erişime izin vermeyen bir şekilde yapılandırılmışsa, istek hiçbir zaman uygulamaya ulaşmaz. Bu nedenle özniteliği [AllowAnonymous] geçerli değildir.
Anonim erişime izin ver
Hem Windows Kimlik Doğrulaması hem de anonim erişim etkinleştirildiğinde, [Authorize] ve [AllowAnonymous] özniteliklerini kullanın. özniteliği, [Authorize] uygulamanın kimlik doğrulaması gerektiren uç noktalarının güvenliğini sağlamanızı sağlar.
[AllowAnonymous] özniteliği, anonim erişime izin veren uygulamalarda [Authorize] özniteliğinin üzerine yazar. Öznitelik kullanımı ayrıntıları için bkz . ASP.NET Core'da basit yetkilendirme.
Note
Varsayılan olarak, bir sayfaya erişim yetkisi olmayan kullanıcılara boş bir HTTP 403 yanıtı sunulur. StatusCodePages Ara Yazılımı, kullanıcılara daha iyi bir "Erişim Reddedildi" deneyimi sağlayacak şekilde yapılandırılabilir.
Impersonation
ASP.NET Core kimliğe bürünme uygulamaz. Uygulamalar, tüm isteklerde uygulamanın kimliğiyle, uygulama havuzu kimliğini veya işlem kimliğini kullanarak çalışır. Uygulamanın bir kullanıcı adına bir eylem gerçekleştirmesi gerekiyorsa, WindowsIdentity.RunImpersonated veya RunImpersonatedAsync'yi terminal satırı araya yazılım katmanında kullanın. Startup.Configure. Bu bağlamda tek bir eylem çalıştırın ve bağlamı kapatın.
app.Run(async (context) =>
{
try
{
var user = (WindowsIdentity)context.User.Identity;
await context.Response
.WriteAsync($"User: {user.Name}\tState: {user.ImpersonationLevel}\n");
WindowsIdentity.RunImpersonated(user.AccessToken, () =>
{
var impersonatedUser = WindowsIdentity.GetCurrent();
var message =
$"User: {impersonatedUser.Name}\t" +
$"State: {impersonatedUser.ImpersonationLevel}";
var bytes = Encoding.UTF8.GetBytes(message);
context.Response.Body.Write(bytes, 0, bytes.Length);
});
}
catch (Exception e)
{
await context.Response.WriteAsync(e.ToString());
}
});
Microsoft.AspNetCore.Authentication.Negotiate Paket Windows, Linux ve macOS'ta kimlik doğrulamasını etkinleştirse de, kimliğe bürünme yalnızca Windows'ta desteklenir.
Talep dönüştürmeleri
IIS ile barındırırken, AuthenticateAsync bir kullanıcıyı başlatmak için dahili olarak çağrılmaz. Bu nedenle, her kimlik doğrulamasından sonra talepleri dönüştürmek için kullanılan bir IClaimsTransformation uygulama varsayılan olarak etkinleştirilmez. Daha fazla bilgi ve talep dönüştürmelerini etkinleştiren bir kod örneği için bkz İşlem içi ve işlem dışı barındırma arasındaki farklar.
Ek kaynaklar
ASP.NET Core