ASP.NET OWIN WebForms 需要授權所有頁面
我使用 Visual Studio 2013 Update 2 創建了一個新的 ASP.NET WebForms 應用程序。然後我更新了所有 NuGet 包並刪除了所有 OAuth 內容,因為我只需要我熟悉的“表單”身份驗證。
我想要的是配置 OWIN/ASP.NET 身份框架**,以便所有頁面都需要授權**,包括預設頁面 - 所以使用者應該看到的第一頁是登錄頁面。這樣做的正確方法是什麼?我在 Internet 上找不到任何資源來展示如何使用 OWIN/ASP.NET 標識保護 WebForms 頁面。
我將以下 XML 添加到主 web.config 文件的底部,但出現錯誤:
<authorization> <deny users="?"/> </authorization>錯誤是:無法訪問請求的頁面,因為該頁面的相關配置數據無效。
您是對的,沒有關於將經典 ASP.Net 授權與 OWIN 安全中間件一起使用的資源。
我正在使用 ASP.Net 網頁,所以我的實驗與您的類似(我們都嘗試保護 aspx 或 cshtml 的靜態文件)。
我的實驗太可怕了。我正要用頭撞牆。
最後我發現瞭如何讓它執行。這就是我所做的:
- Web.config:保護除匿名使用者必須可用的特殊頁面之外的所有內容。
<configuration> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> <location path="shell.cshtml"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <location path="notFound.cshtml"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <location path="security/login.cshtml"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> </configuration>
- OWIN啟動類:
public static class Startup { public static void Configuration(IAppBuilder app) { var cookieExpiration = TimeSpan.FromMinutes(20); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active, CookieName = "efa", ExpireTimeSpan = cookieExpiration, SlidingExpiration = true, AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, User, long>( validateInterval: cookieExpiration, regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager), getUserIdCallback: identity => Identity.Identity.ExtractIdFromClaims(identity)) } }); app.UseWebApi(new HttpConfig()); } }設置是至關重要的
AuthenticationMode = AuthenticationMode.Active。我花了一整天的時間來發現這一點。如果將其設置為Passive,身份驗證中間件將不會填充 HTTP 上下文的 Identity 和 Principal 對象,並且授權模組將禁止所有請求。這將使經典
UrlAuthorization模組根據 OWIN 中間件填充的身份為您工作。需要注意的是,Microsoft.Owin.Host.SystemWeb必須安裝 Nuget 包,否則 OWIN 將無法與 ASP.Net 管道集成。您也可以使用這些現代 OWIN 授權模組 http://leastprivilege.com/2014/06/24/resourceaction-based-authorization-for-owin-and-mvc-and-web-api/ 它們是高度可定制的並且可以保護 MVC 控制器、Web API 控制器和靜態文件。