ASP.NET Core 練習 - 啟用 Windows 驗證
0 |
從 ASP.NET 5 轉進 ASP.NET Core,有些地方需要重蹲馬步打基礎。
拿最近遇到的切換匿名存取或 Windows 驗證為例。ASP.NET + IIS 的話是從 IIS 管理員或由 web.config 設定;IIS Express 則可用 Visual Studio 專案屬性視窗切換,熟到像是反射動作。但,ASP.NET Core 呢?登楞!
在 Visual Studio 新增 ASP.NET Core 專案時可選取 Authentication 方式,有 Windows 驗證或匿名可選:
若專案原本為匿名存取想改成 Windows 驗證,或是想從 Windows 驗證改回匿名存取,開關藏在專案 Properties 目錄下的 launchSettings.json,透過 iisSettings/windowsAuthentication 及 anonymousAuthentication 設定 true/false 可切換 IIS Express 是否啟用匿名或 Windows 驗證,相當以前 ASP.NET 專案屬性視窗裡的設定,有 ASP.NET 開發經驗的同學應該不難理解。
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:65405",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"AspNetCoreWeb": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
ASP.NET Core 部署到 IIS 後,則改由 web.config 控制,透過 IIS 管理員調整或修改 <system.webServer><security><authentication> 皆可,跟 ASP.NET 時代做法雷同。
上述做法適用於 IIS/IIS Express,在 Kestrel 要啟用 Windows 驗證稍稍複雜一點。
等等! Kestrel 不是用在 Linux 等非 Windows 環境,幹嘛整合 Windows 驗證?其實 Linux、macOS 是可以支援 AD 驗證的 參考,雖然不常見,但在 Linux 跑 Kestrel 讓使用者用 AD 帳號登入 ASP.NET Core 網站,真的是一種選項。
要在 Kestrel 使用 Windows 驗證,專案需參照 Microsoft.AspNetCore.Authentication.Negotiate NuGet package,並修改 Startup.cs 加入 services.AddAuthentication(...) 及 app.UseAuthentication():
public void ConfigureServices(IServiceCollection services)
{
//設定支援 Negotiate, Kerberos 及 NTLM 驗證
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
//啟用身分認證
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
IIS/IIS Express 關閉匿名存取的話就會強迫使用者一律登入,Kestrel 不同,必須在 Controller 或 Razor Page Model 加上 [Authorize] 才能要求使用者登入存取。除了逐一設定,亦可在 AddMvc() 時預設加入 AuthorizeFilter 全面啟動:參考:Apply Authorization by default in ASP.NET Core
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(o =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new AuthorizeFilter(policy));
});
}
嗯,ASP.NET Core Windows 驗證的技巧切換,GET!
【延伸閱讀】
Microsoft Docs: Configure Windows Authentication in ASP.NET Core
Tips of how to eanble Windows authentication in ASP.NET Core project.
Comments
Be the first to post a comment