安全持久的 ASP.NET Forms 身份验证





4.00/5 (3投票s)
一个 ASP.NET 系统,用于使用两个身份验证 cookie,一个安全,一个不安全,通过文件夹实现多层安全。
引言
虽然 ASP.NET Forms 身份验证系统是一个很好的身份验证系统,但它在很多情况下都有一个重大的缺点。 你只能将其限制为始终以安全的方式传递身份验证 cookie,或者始终传递它们,即使连接不安全。 没有任何中间的身份验证方法可供您使用。 这意味着如果您运营一个网店,您就会遇到一个问题。
通常,网店希望在客户进入网站后以及整个购物体验中尽快识别客户。 但是,当用户编辑他们的帐户或结账时,您希望将他们切换到安全模式。 为了安全起见,用于对结账进行身份验证的 cookie 必须仅限于 SSL 连接。 这意味着要保持他们的登录状态,您将不得不从他们登录的那一刻起就保持 SSL 状态,这会增加很多不必要的服务器负载。 此外,它还可能导致您希望在页面上包含未加密的外部内容时出现问题。
解决方案是修改 Forms 身份验证系统以使用一对 cookie。 一个仅用于识别您,但无法访问安全功能,不需要传输 SSL,并且在会话之间是持久的。 另一个是完整的身份验证,需要传输 SSL。
使用代码
将以下内容添加到您的根 web.config 文件中。 这些部分可能已经存在,您只需向其中添加其他条目即可
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<sectionGroup name="partialAuthenticationSystem">
<section name="authentication"
type="PartialAuthenticationSystem.PartialAuthenticationSection,
PartialAuthenticationSystem"
allowDefinition="MachineToApplication" />
<section name="authorization"
type="PartialAuthenticationSystem.PartialAuthorizationSection,
PartialAuthenticationSystem" />
</sectionGroup>
</configSections>
<system.web>
<httpModules>
<add name="PartialAuthorization"
type="PartialAuthenticationSystem.PartialAuthorizationModule,
PartialAuthenticationSystem" />
<add name="PartialAuthentication"
type="PartialAuthenticationSystem.PartialAuthenticationModule,
PartialAuthenticationSystem" />
</httpModules>
</system.web>
<partialAuthenticationSystem>
<authentication timeout="172800" name=".ASPXIDENTITY" requireSSL="false" />
<authorization requireSSL="None" requireLogin="false" />
</partialAuthenticationSystem>
</configuration>
您还必须在 <authenctication>
部分下的 <system.web>
中启用 Forms 身份验证,并且如果您使用 SSL,那么您可能还会将 requireSSL
设置为 true
。
请注意,您可以根据需要自定义 <partialAuthenticationSystem>
下的设置。 timeout
是持久 cookie 的超时时间。 cookie 名称必须与用于 Forms 身份验证的 cookie 名称不同。
您还可以将 <authorization>
部分从 <partialAuthenticationSystem>
添加到子文件夹中的 web.config 文件中,如下所示
<?xml version="1.0"?>
<configuration>
<partialAuthenticationSystem>
<authorization requireSSL="Required" requireLogin="false" />
</partialAuthenticationSystem>
</configuration>
您还必须更改代码以使用 PartialAuthentication
静态类进行登录和注销,而不是 FormsAuthentication
类。 这将创建或删除所有必要的 cookie。 要从安全部分注销用户但仍保留持久的不安全 cookie,请改用 FormsAuthentication.SignOff
方法。 如果您正在使用标准登录控件,只需重写 LoggedIn
事件即可。
关注点
请注意,此库专为 .NET 3.5 和 Visual Studio 2008 设计,尽管如果您更改项目设置,它应该很容易转换回 .NET 2.0。
历史
- 1.0.1.0 - 2008 年 5 月 28 日 - 修复了安全 WebResource.axd 和 ScriptResource.axd 请求的 HTTP 重定向问题。
- 1.0.0.0 - 2008 年 5 月 13 日 - 初始发布。
- 1.0.1.1 - 8/26/2008
- 修复了应用程序重新加载后
PartialAuthentication
属性未始终初始化的错误 - 修复了无效身份验证票证引发异常而不是忽略它们的错误
- 修复了应用程序重新加载后