[英]Automatic Redirect on Authorize Failure Using IIS Automatic Authentication with ASP.NET Core MVC
我正在ASP.Net Core MVC中創建一個網站,並使用IIS的自動身份驗證通過活動目錄自動驗證公司的用戶。 目前,它正在按預期的方式工作,但是, 如果用戶無法通過IIS進行驗證 , 我希望將其重定向到登錄頁面。 我看過其他文章,描述了使用普通身份驗證Cookie而不是使用自動身份驗證cookie時如何執行此操作。
這是我當前的Configure Services方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
因此,目前它已成功鎖定了標記為[Authorize]的頁面上沒有AD授權的用戶,我只想將鎖定的流量重定向到標記為[AllowAnonymous]的另一個頁面。 有沒有辦法修改services.Configure方法? 到目前為止,我什么都沒看到。
您使用的是Windows身份驗證 。 對AutomaticAuthentication
的引用僅告訴IIS使用用戶詳細信息自動設置HttpContext.User
(否則,即使身份驗證成功,也不會設置)。
您真正要尋找的是兩種身份驗證方法:對於具有AD帳戶的人(使用這些帳戶登錄),請使用Windows身份驗證自動登錄。 否則,顯示登錄屏幕,您可以自己處理身份驗證。
我之前在ASP.NET MVC中已經做到這一點,但是我還沒有在ASP.NET Core中做到這一點。 我將描述我所做的事情,但這並不是一個完整的解決方案,因為ASP.NET Core缺少一部分。
使用cookie作為主要身份驗證方法。 像平常一樣設置它,並使用一個登錄頁面來驗證憑據並設置cookie 。
設置一個使用Windows身份驗證的控制器操作(例如/Login/SSO
)。 我在web.config中使用了location
標記來做到這一點。 在ASP.NET Core中,這仍然可能是相同的,我只是不太確定您如何在代碼中進行了解。 但是web.config中的部分看起來像這樣:
<location path="Login/SSO">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true"/>
<anonymousAuthentication enabled="false"/>
</authentication>
</security>
</system.webServer>
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
在該操作的代碼中,假設您可以弄清楚如何從Windows身份驗證中獲取用戶名,則可以設置Cookie並返回200 OK(無需返回視圖)。 如果Windows身份驗證失敗,則IIS將自行返回401。 (我認為<allow users="?"/>
只是為了防止cookie身份驗證嘗試重定向-但我不記得了)
花哨的技巧在登錄頁面上。 默認情況下隱藏頁面上的所有內容。 在頁面加載時,向/Login/SSO
發出AJAX請求。 如果成功,則用戶已登錄,您可以將他們(通過javascript)轉發到他們想要的頁面。 如果失敗,則僅顯示登錄頁面的內容。 看起來像這樣(假設您使用的是jQuery):
$(function() {
$.get("@Url.Action("SSO", "Login")").done(function(data) {
//success! forward to the page they want
window.location.replace(returnUrl);
}).fail(function() {
//failed - show login prompt
$("#loginBox").show();
});
});
使用此設置,可以使用Windows身份驗證進行身份驗證的用戶將訪問該站點,將其重定向到登錄頁面,該登錄頁面將執行成功的AJAX請求以創建其Cookie,然后將他們重定向回到所需的原始頁面。 相當無縫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.