使用父站点的表单身份验证的静态 html 页面保护子站点
Secure sub site with static html pages with forms authentication of parent site
我在 IIS 8 中有一个 ASP .NET MVC 站点,该站点使用表单身份验证进行保护。在此站点中,我有子站点(这是通过 IIS 8 中的 "Add application" 选项创建的应用程序)。该子站点由静态 html 页面组成。所以例如我的主要站点 URL 是 www.site.com。子站点 url 是 www.site.com/mysite.
我需要配置 mysite,这样如果用户登录到 www.site.com,则只能访问 mysite。尝试直接访问我的网站应该重定向到 www.site.com 登录页面。
我在谷歌上搜索了很多,并在 SO 中找到了一些文章。
尝试 1:
How do I protect static files with ASP.NET form authentication on IIS 7.5?
基于这个 SO 问题,我尝试对父站点的 web.config 进行更改。我在这里提一下
<system.webServer>
<modules>
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
</modules>
</system.webServer>
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms defaultUrl="/Home/Index" loginUrl="/" protection="All" timeout="90">
</forms>
</authentication>
</system.web>
然而,使用这些设置,当我尝试打开 www.site.com/mysite 时,它会将我重定向到带有 www.site.com?returnUrl=mysite 的登录页面。但是登录后它再次将我重定向到登录页面
尝试 2:
How to do Forms Authentication on purely HTML pages using ASP.NET?
根据这个 SO 问题,我尝试通过在 web.config 中添加以下内容,使子站点 www.site.com/mysite 由 ASP .NET 处理子站点 (mysite)。然而没有快乐
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
尝试 3:
我尝试直接在子站点的 web.config 文件中添加表单身份验证和授权设置 (www.site.com/mysite)
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms defaultUrl="/Home/Index" loginUrl="/" protection="All" timeout="90" domain="site.com">
</forms>
</authentication>
</system.web>
这里要注意的重要一点是
domain
属性添加到表单标签。还是不开心!
现在我想知道我正在尝试的东西是否可行?或者是否有任何我可能不知道的替代解决方案?
解决方法如下:
步骤 1
使具有静态 html 页面的子站点由 ASP .NET
处理
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
第 2 步:
在父(主)站点和子(子)站点之间共享表单身份验证密钥,即在父站点 web.config 和子站点 web.config[= 下面添加12=]
<system.web>
<machineKey decryptionKey="Yourdecryptionkey" validationKey="Your validation
key" />
</system.web>
- 为了生成这些密钥,在 IIS select 您的站点中。
- 双击右侧窗格中的 MachineKey 选项。
- 这里取消勾选 "Automatically generate at runtime" 和
"Generate unique key for each application" 用于验证密钥和
解密密钥。这将填充验证键和
解密密钥箱。现在您可以复制这些键并在
您的子站点
我在 IIS 8 中有一个 ASP .NET MVC 站点,该站点使用表单身份验证进行保护。在此站点中,我有子站点(这是通过 IIS 8 中的 "Add application" 选项创建的应用程序)。该子站点由静态 html 页面组成。所以例如我的主要站点 URL 是 www.site.com。子站点 url 是 www.site.com/mysite.
我需要配置 mysite,这样如果用户登录到 www.site.com,则只能访问 mysite。尝试直接访问我的网站应该重定向到 www.site.com 登录页面。
我在谷歌上搜索了很多,并在 SO 中找到了一些文章。
尝试 1: How do I protect static files with ASP.NET form authentication on IIS 7.5?
基于这个 SO 问题,我尝试对父站点的 web.config 进行更改。我在这里提一下
<system.webServer>
<modules>
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
</modules>
</system.webServer>
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms defaultUrl="/Home/Index" loginUrl="/" protection="All" timeout="90">
</forms>
</authentication>
</system.web>
然而,使用这些设置,当我尝试打开 www.site.com/mysite 时,它会将我重定向到带有 www.site.com?returnUrl=mysite 的登录页面。但是登录后它再次将我重定向到登录页面
尝试 2: How to do Forms Authentication on purely HTML pages using ASP.NET?
根据这个 SO 问题,我尝试通过在 web.config 中添加以下内容,使子站点 www.site.com/mysite 由 ASP .NET 处理子站点 (mysite)。然而没有快乐
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
尝试 3:
我尝试直接在子站点的 web.config 文件中添加表单身份验证和授权设置 (www.site.com/mysite)
<system.web>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms defaultUrl="/Home/Index" loginUrl="/" protection="All" timeout="90" domain="site.com">
</forms>
</authentication>
</system.web>
这里要注意的重要一点是
domain
属性添加到表单标签。还是不开心!
现在我想知道我正在尝试的东西是否可行?或者是否有任何我可能不知道的替代解决方案?
解决方法如下:
步骤 1
使具有静态 html 页面的子站点由 ASP .NET
处理<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
第 2 步:
在父(主)站点和子(子)站点之间共享表单身份验证密钥,即在父站点 web.config 和子站点 web.config[= 下面添加12=]
<system.web>
<machineKey decryptionKey="Yourdecryptionkey" validationKey="Your validation
key" />
</system.web>
- 为了生成这些密钥,在 IIS select 您的站点中。
- 双击右侧窗格中的 MachineKey 选项。
- 这里取消勾选 "Automatically generate at runtime" 和 "Generate unique key for each application" 用于验证密钥和 解密密钥。这将填充验证键和 解密密钥箱。现在您可以复制这些键并在 您的子站点