0

我在使用Windows身份驗證的應用程序中遇到問題。爲什麼Mvc.AuthorizeAttribute和Http.AuthorizeAttribute對於Windows身份驗證中的未授權狀態具有不同的行爲

我有MVC控制器和ApiController與自定義AuthorizeAttribute應用。當Mvc.Authorization在MVC中失敗時,我可以將它重定向到一個錯誤頁面,但對於Http.Authorization,我只能將IsAuthorized返回爲true或false,並且它顯示一個與用於Windows身份驗證的登錄模式相同的模式對話框授權。我無法尋找正確的解釋爲什麼會發生。我可以定製它嗎?他們都返回401狀態,但爲什麼他們有不同的行爲?

回答

2

你提到的是預期的行爲。

Asp.NET MVC通常爲瀏覽器客戶端提供網頁,因此如果未經授權訪問任何資源,您將用戶從服務器本身重定向到另一頁面(視圖),您可以在其中向用戶顯示錯誤/消息。所以你的迴應是重定向到另一頁,而不是未經授權的401狀態碼。

但是ASP.NET WebAPI是一種應該被其他應用程序使用的服務,它們的輸出通常是數據而不是特定的視圖。因此,當識別出未經授權的訪問時,Web API會回覆狀態碼401(這是一種預期的行爲)。

現在,如果您嘗試通過瀏覽器訪問web api,並且它從服務器收到未經授權的響應,它會向用戶顯示一個彈出窗口,以便用戶有機會再次提供證書並再次憑證輸入api。