18

我在 IIS7 中使用表单身份验证来对开发站点进行密码保护,但是当站点仅包含静态 HTML文件 + login.aspx + web.config 时,身份验证似乎被绕过了。

当我将文件重命名为 .aspx 时,系统会提示我登录表单,但我没有做任何花哨的事情。我有一个非常简单的登录脚本,之后它应该只重定向到 index.html。

有什么建议么?总而言之,整个站点都在使用 HTML(目前)并且需要密码保护。

<authentication mode="Forms">
  <forms name="appNameAuth" path="/" loginUrl="~/login.aspx" defaultUrl="index.html" protection="All" timeout="525600">
    <credentials passwordFormat="Clear">
      <user name="[user]" password="[password]" />
    </credentials>
  </forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>
4

4 回答 4

11

在 IIS7 中,如果您想在表单身份验证下保护 *.html 或 *.htm 文件(或其他非 .net 扩展名),则将以下行添加到您的 web.config:

<compilation>
    <buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
    </buildProviders>
</compilation>

<system.webServer>
     <handlers>
         <add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG"   type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
         <add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
     </handlers>
</system.webServer>
于 2010-10-24T17:06:06.920 回答
10

要使 HTML 文件被您的表单身份验证锁定,您需要让它们由 ASP.NET 提供服务。您可以在 IIS 中通过将所需的扩展名(例如 .html、.htm 等)与 aspnet_isapi.dll 相关联来执行此操作。

一旦 ASP.NET 为这些文件提供服务,您就可以像任何 aspx 页面一样为它们指定权限。

有关详细信息,请参阅MSDN

默认情况下,IIS 自己处理静态内容(如 HTML 页面、CSS 和图像文件),并且仅在请求扩展名为 .aspx、.asmx 或 .ashx 的页面时才将请求传递给 ASP.NET 运行时。

但是,IIS 7 允许集成 IIS 和 ASP.NET 管道。通过一些配置设置,您可以设置 IIS 7 为所有请求调用 FormsAuthenticationModule。此外,使用 IIS 7,您可以为任何类型的文件定义 URL 授权规则。有关详细信息,请参阅 IIS6 和 IIS7 安全性之间的更改、您的 Web 平台安全性和了解 IIS7 URL 授权。

长话短说,在 IIS 7 之前的版本中,您只能使用表单身份验证来保护由 ASP.NET 运行时处理的资源。同样,URL 授权规则仅适用于由 ASP.NET 运行时处理的资源。但是使用 IIS 7,可以将 FormsAuthenticationModule 和 UrlAuthorizationModule 集成到 IIS 的 HTTP 管道中,从而将此功能扩展到所有请求。

于 2010-08-28T05:25:58.527 回答
2

虽然这是一个老问题,但我发现 pomarc 答案中的链接非常有用。以下是适用于 IIS7 的摘要。

在您的web.config,添加或修改<handlers><system.webServer>

<handlers>
  <add name="HTML" path="*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" />
</handlers>

verb用您需要的值替换值;scriptProcessor价值与您的环境的正确路径。

然后,添加或修改<compilation><httpHandlers><system.web>

<compilation debug="false" strict="false" explicit="true">
  <buildProviders>
    <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)-->
    <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
  </buildProviders>
</compilation>
<httpHandlers>
  <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)-->
  <add verb="GET, HEAD, POST, DEBUG" path="*.html" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>

verb用您需要的值替换值。

您还可以包含更多以逗号“,”分隔的扩展名

于 2016-05-11T08:19:28.947 回答
1

几天前我已经解决了同样的问题,通过关注 fr33m3 @ 11-21-2007,下午 3:19 在此线程上的帖子: http : //forums.asp.net/t/1184547.aspx从 2. 到 5. 的步骤,你就完成了!

希望这可以帮助你喜欢它帮助了我。

于 2010-10-15T09:26:53.487 回答