IIS安全设置与身份验证

在Web开发中,经常需要对某些资源进行访问控制,以确保只有授权的用户才能访问。例如,可能希望限制对特定类型的文件或URL请求的访问,而不需要用户登录。本文将介绍如何使用IIS和一些简单的代码来实现这一目标。

设置Forms身份验证

首先,需要设置应用程序使用Forms身份验证。这可以通过修改web.config文件来实现。在system.web部分添加以下配置:

<system.web> <authentication mode="Forms"> <forms loginUrl="Authentication/Login.aspx" name=".ASPNETFRM" /> </authentication> </system.web>

这样设置后,只有当用户尝试访问被拒绝的资源时,Forms身份验证才会强制用户登录。如果没有指定授权部分,所有用户都可以访问所有资源。

限制对特定文件的访问

接下来,需要限制对trace.axd文件的访问,只允许已认证的用户访问。为此,需要在web.config文件中添加一个location标签:

<configuration> <location path="trace.axd"> <authorization> <deny users="?" /> </authorization> </location> </configuration>

这样设置后,只有已认证的用户才能访问trace.axd文件。

创建认证文件夹和登录页面

在网站的根目录下创建一个新的Web应用程序,名为Authentication。这是ASP.NET将重定向需要认证的用户的地方。它应该与步骤1中添加到forms元素的loginUrl属性的第一部分匹配。

使用IIS,更改此文件夹的安全设置,移除匿名Digest和Windows身份验证,并启用Basic。

在Authentication文件夹中创建一个名为Login.aspx的文件。这个文件名应该与loginUrl属性的最后部分匹配。它将包含将Windows身份验证映射到基于ASP.NET forms应用程序的代码。

在Login.aspx中复制以下代码:

<%@ Page language="c#" AutoEventWireup="true" Inherits="System.Web.UI.Page" %> <%@ Import Namespace="System.Web.Security" %> <%@ Import Namespace="System.Configuration" %> <script language="C#" runat="server"> private void Page_Load(Object Src, EventArgs e) { string user = HttpContext.Current.User.Identity.Name; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(user, false, 30); string encTicket = FormsAuthentication.Encrypt(ticket); Response.Cookies.Add(new HttpCookie(ConfigurationSettings.AppSettings["AuthCookie"], encTicket)); Response.Redirect(FormsAuthentication.GetRedirectUrl(user, false)); } </script>

当Page Load事件运行时,代码会从HttpContext获取当前用户的名称。然后创建一个新的FormsAuthenticationTicket,然后将其作为cookie返回给用户。cookie的名称必须与web.config中定义的名称相同。

设置cookie和绑定ASP.NET到IIS身份验证

在Authentication文件夹中创建一个新的web.config文件。在此文件中,需要添加在Login.aspx中拾取的cookie的应用设置值,并且需要将ASP.NET绑定到IIS身份验证,以确保HttpContext的User属性用IIS身份验证的用户详细信息填充。

<configuration> <appSettings> <add key="AuthCookie" value=".ASPNETFRM" /> </appSettings> <system.web> <authentication mode="Windows" /> </system.web> </configuration>

这样设置后,用户需要具有有效的NTFS权限才能访问Authentication文件夹和Login.aspx页面。不需要限制对这些文件的访问,只需确保所有用户都能访问它们。

禁用应用程序的唯一加密密钥

Forms身份验证的默认行为是,网站中的每个应用程序都会收到一个用于加密cookie值的唯一加密密钥。因为需要在Authentication应用程序中创建的cookie在网站的所有其他应用程序中都有效,所以需要关闭这种行为。

在根应用程序的web.config文件中添加额外的条目:

<system.web> <machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" /> </system.web>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485