【问题标题】:How to do Forms Authentication on purely HTML pages using ASP.NET?如何使用 ASP.NET 在纯 HTML 页面上进行表单身份验证?
【发布时间】:2011-04-05 01:53:30
【问题描述】:

我在 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>

【问题讨论】:

    标签: asp.net html iis-7 forms-authentication static-content


    【解决方案1】:

    虽然这是一个老问题,但我发现 pomarc 答案中的链接非常有用。下面是适合IIS7的总结。

    在您的web.config 中,在&lt;system.webServer&gt; 下添加或修改&lt;handlers&gt;

    <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 值与您的环境的正确路径。

    然后,在&lt;system.web&gt;下添加或修改&lt;compilation&gt;&lt;httpHandlers&gt;

    <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 值替换为您需要的值。

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

    【讨论】:

      【解决方案2】:

      在 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>
      

      【讨论】:

      • 我尝试使用它来提供 Excel 文件。但是,ASP.NET 尝试编译 Excel 文件,结果出现语法错误。
      【解决方案3】:

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

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

      【讨论】:

      • 您可能想总结一下 SO 上的信息,以防其他网站消失。
      【解决方案4】:

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

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

      更多信息请参考MSDN:

      默认情况下,IIS 处理静态 内容本身 - 如 HTML 页面和 CSS 和图像文件 - 只有双手 关闭对 ASP.NET 运行时的请求 当一个页面的扩展名为 请求 .aspx、.asmx 或 .ashx。

      然而,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 管道,从而扩展了这个 所有请求的功能。

      【讨论】:

        猜你喜欢
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多