解决窗体身份验证

ASP.NET 支持语音列

故障排除的窗体身份验证

若要自定义此列与您的需求,我们希望邀请您提交您感兴趣的主题和您感兴趣的在将来解决知识文库文章和 Support Voice 专栏您想要查看的问题的主题的想法。您可以提交您的想法和反馈使用已对它提出的形式。还有一个链接到窗体中此列的底部。

欢迎使用 ASP.NET 支持语音列 !我的名字是 Jerry Orman。我已 5 年,与微软,如 Microsoft FrontPage Web 相关的技术和最新的 Microsoft SharePoint 技术上的我时间的大部分。我花了使用 Microsoft ASP.NET 作为技术支持工程师的最后一年。在支持语音列中,这个月我将解释如何解决在 Microsoft ASP.NET 窗体身份验证。

故障排除的窗体身份验证

在 ASP.NET 应用程序中使用窗体身份验证时,您可能会发现需要解决用户随机重定向到登录页时发生的问题。在理想世界中,此问题将会出现将允许的方式轻松地将一个调试器附加并捕获问题。在生产环境中,但是,这是很少这种情况。若要解决此类随机问题,您需要登录,以便您可以缩小的根本原因,与问题相关的信息。

在本专栏中,我们将简要介绍 Forms 身份验证的概念。我们将再研究哪些方案导致用户被重定向到登录页面,以及如何捕获与隔离问题相关的数据。我们还将介绍如何实现 IHttpModule 接口,以记录的窗体身份验证信息。

窗体身份验证概述

当用户访问 Web 站点通过使用窗体身份验证时,服务器将创建一个 cookie。Cookie 的值是加密的 forms 身份验证票证。对每一个请求到应用程序时,该 cookie 传递到服务器和FormsAuthenticationModule类解密 cookie 值,并确定该用户是否为有效。

默认情况下,通过在 Machine.config 文件中添加了FormsAuthenticationModule类。FormsAuthenticationModule类管理 FormsAuthentication 过程。

以下是 Machine.config 文件中的条目︰

<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

通过使用窗体身份验证进行身份验证的一般 HTTP 通信量与以下类似︰

  1. 客户端发送 HTTP GET 到 Default.aspx。没有表单身份验证 cookie 将被发送。

  2. 服务器发送到 Login.aspx 302 响应 (重定向)。

  3. 客户端发送 HTTP POST 到 Login.aspx。它包括的登录信息。

  4. 服务器发送到 Default.aspx 的 302 响应 (重定向)。窗体身份验证 cookie 将包括。

  5. 客户端发送 HTTP GET 到 Default.aspx。这包括表单身份验证 cookie。

有关实现和使用窗体身份验证的详细信息,请访问下面的 MSDN 网站︰

http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspx有关共享表单身份验证 cookie 的详细信息,请访问下面的 ASP.NET Web 站点︰

http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx

可能会将用户重定向到登录页的原因

窗体身份验证 cookie 将丢失

方案 1


在这种情况下,在用户登录到 Web 站点。在某一时刻,客户端将请求发送到服务器,并将
FormsAuthenticationModule类不接受 cookie。您可以通过启用 cookie 记录在 Microsoft Internet Information Services (IIS) 是否用户请求不包含该 cookie 来确定。为此,请执行以下步骤︰

  1. 打开 IIS Microsoft 管理控制台 (MMC)。

  2. 右键单击网站,然后单击
    属性

  3. 单击网站选项卡,然后单击启用日志记录

  4. 请确保日志格式为W3C 扩展日志文件格式

  5. 单击属性

  6. 单击高级选项卡,然后单击
    扩展属性

  7. 扩展属性,单击以选中Cookie(cs(Cookie))复选框和引用站点 (cs(Referer))复选框。

出现此问题后,确定哪些客户端有问题,该客户端的 IP 地址。该客户机的 IP 地址、 IIS 日志进行筛选并查看 <cookie> 列。

注意:您可以使用日志分析器分析 IIS 日志。若要下载日志分析器,请访问下面的 Microsoft 网站︰

http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07从特定用户的请求的列表后,搜索到登录页的请求。您知道他们被重定向到此页,并且您想要查看请求重定向发生之前。如果您看到的内容类似于以下内容,客户端或者未发送 cookie 或 cookie 中移除了在客户端和服务器之间的网络上。

这是初始登录。

方法

页面

响应

Cookie

获取

/Default.aspx

302 (重定向)

没有 Cookie

获取

/Login.aspx

200 (成功)

没有 Cookie

发布

/Login.aspx

302 (重定向)

没有 Cookie

获取

/Default.aspx

200 (成功)

.ASPXAUTH

获取

/SomePage.aspx

302 (重定向)

否。ASPXAUTH Cookie

这些都是跟请求一个页面没有站点上的其他请求。ASPXAUTH cookie。

方法

页面

响应

Cookie

获取

/SomePage.aspx

302 (重定向)

否。ASPXAUTH Cookie

获取

/Login.aspx

200 (成功)

否。ASPXAUTH Cookie

发布

/Login.aspx

302 (重定向)

否。ASPXAUTH Cookie

获取

/SomePage.aspx

200 (成功)

.ASPXAUTH


注意:从该用户在首次请求且不太可能有窗体身份验证 cookie,除非您正在创建的持久性 cookie。IIS 日志将仅显示您已收到的请求中的 cookie。窗体身份验证 cookie 的第一个请求将在请求后成功的登录尝试。

方案 2


在超过客户端 cookie 限制时,窗体身份验证 cookie 还可能会丢失。在 Microsoft Internet Explorer,没有 20 cookie 的限制。20 的 cookie 在客户端上创建后,以前的 cookie 将从客户端的集合。如果。删除 ASPXAUTH cookie,用户将被重定向到登录页时处理下一个请求。

以相同的方式,可以解决这两个方案。 看看之前重定向到登录页的请求。如果此页请求生成 cookie,这将是调查的内容。

有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

306070号,并在 Internet Explorer 中的 cookie 的大小限制


您可以使用 Fiddler 查看发送到客户端的 HTTP 标头。捕获的通信之后,双击请求,然后单击标题来查看设置 Cookie 标题。如果您跟踪登录成功,您将看到成功登录的响应中设置 Cookie 标题。

若要下载 Fiddler,请访问下面的 Fiddler Web 站点︰

http://www.fiddlertool.com/fiddler/

方案 3


该请求离开客户端之后,有可能影响正在发送的数据包的各层。若要确定是否网络设备删除 cookie,您必须捕获客户端和服务器上的网络跟踪,然后查找该 cookie 的请求的正文中。您想要看一看,以确保发送 cookie 的客户端请求并检查服务器跟踪以确保服务器接收到该 cookie。

客户端请求

这是一个 GET 请求后用户已经过身份验证。Forms 身份验证票证信息将以蓝色突出显示。这证实 cookie 信息保留客户端。当您使用网络捕获工具,如网络监视器,您看到实际上已通过适配器的通讯。

47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61 gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63 spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53 che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30 PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36 C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46 9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35 51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46 81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34 24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39 B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46 9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43 BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46 2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65 4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62 =VisitorId=b24eb

服务器端请求

当您查看请求到达服务器时,您希望确保服务器接收到客户端发送相同的信息。如果服务器未收到相同的信息,则需要调查来确定该 cookie 移除了网络上的其他设备。

注意:也已经删除 cookie 的 ISAPI 筛选器的实例。如果您确认,Web 服务器接收到的 cookie,但在 IIS 日志中未列出该 cookie,请检查 ISAPI 筛选器。您可能需要删除筛选器以查看问题是否已解决。

Forms 身份验证票证超时

用户被重定向的其他常见原因是如果 forms 身份验证票证已过期。Forms 身份验证票证可以以两种方式的超时时间。如果使用绝对过期,会出现第一种方案。使用绝对过期,身份验证票证到期到期时间到期时。例如,设置为过期的 20 分钟,而下午 2:00,用户访问该站点。如果用户访问该站点,在下午 2:20 后,用户将重定向到登录页。

如果使用可调过期,该方案是稍微复杂一些。如果过期时间半过期后,用户访问该站点,则会更新 cookie 并得到票。例如,使用可调过期设置过期时间 20 分钟。下午 2:00,用户访问该站点,用户会收到被设置为在下午 2:20 过期的 cookie。如果用户访问该站点,下午 2:10 点后才会更新过期。如果用户访问站点时下午 2:09,票证因为过期时间的一半尚未通过不会更新。如果用户然后等待了 12 分钟,下午 2:21 访问相应的站点,将过期票证。用户被重定向到登录页。

一种方法这种类型是问题的要记录的窗体身份验证 cookie 和票据信息。这种方式,您可以看到是否 cookie 收到由 IIS 和值是什么。您可以通过编写http 模块,然后将该模块插入到请求管道来执行此操作。您不需要修改应用程序的代码,以获得所需的信息。

所附的示例适用于 Microsoft.NET Framework 1.1 和.NET Framework 2.0 版中,在整个注释。此示例包括以下文件︰注意我会在 FormsAuthLogger.zip 文件中提供的代码提供的下载链接。

我会指出的主要的区域︰


始终,尽情地提交有关主题的意见要在将来解决列,或者在知识库中使用
窗体已对其询问

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对翻译质量的满意程度如何?

哪些因素影响了你的体验?

是否还有其他反馈?(可选)

谢谢您的反馈意见!

×