解决窗体身份验证

文章翻译 文章翻译
文章编号: 910439 - 查看本文应用于的产品
ASP.NET 支持语音列

故障排除的窗体身份验证

要自定义此列设置为您的需要,我们想要邀请您提交您的想法有关您和您想要查看的问题感兴趣的主题在将来解决知识文库文章和 Support Voice 专栏。您可以提交您的意见和反馈使用 诚征意见 表单。也是一个链接到该窗体,在此列的底部。
展开全部 | 关闭全部

本文内容

欢迎使用 ASP.NET 支持语音列!我的姓名Jerry Orman。我已经与微软超过 5 年,并花了大部分我与 Web 相关的技术,如 Microsoft FrontPage 突出时间和Microsoft SharePoint 的新技术。我花了过去一年的工作Microsoft 的支持工程师的 ASP.NET。本月在支持语音列中,我将介绍如何进行疑难解答中的窗体身份验证Microsoft ASP.NET。

故障排除的窗体身份验证

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

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

窗体身份验证概述

当用户进行身份验证对 Web 站点通过使用窗体身份验证服务器创建的 cookie。Cookie 的值是加密的 forms 身份验证票证。在每次请求,该 cookie 传递给服务器该应用程序和FormsAuthenticationModule类解密 cookie 值和确定用户是否为有效。

默认情况下, FormsAuthenticationModule在 Machine.config 文件中添加类。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 通过启用 cookie日志记录在 Microsoft Internet Information Services (IIS)。若要执行此操作,请按照下列步骤操作:
  1. 打开 IIS Microsoft 管理控制台 (MMC)。
  2. 用鼠标右键单击 Web 站点,然后单击属性.
  3. 单击 Web 站点 选项卡,然后再单击 启用日志记录.
  4. 请确保日志格式 W3C 扩展日志文件格式.
  5. 单击 属性.
  6. 单击 高级 选项卡,然后再单击扩展的属性.
  7. 在下 扩展的属性单击以选中 Cookie(cs(Cookie)) 复选框和 引用站点(cs(Referer)) 复选框。
出现此问题后,以确定哪些客户端具有问题,该客户端的 IP 地址。该客户机的 IP 地址,在对 IIS 日志进行筛选并查看cookie1&gt; 列。

注意您可以使用日志分析器分析 IIS 日志。若要下载日志分析器,请访问下面的 Microsoft Web 站点:
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07
之后,您必须从该特定请求的列表用户搜索到登录页的请求。您知道他们已被重定向对此页上,并且您想要的请求之前,请参阅发生重定向。如果您看到类似于以下内容,客户端的内容任何一个没有发送 cookie 已在客户端之间的网络上删除和服务器。

这是初始登录。
收起该表格展开该表格
方法响应Cookie
获取/Default.aspx302 (重定向)否Cookie
获取/Login.aspx200 (成功)否Cookie
开机自检/Login.aspx302 (重定向)否Cookie
获取/Default.aspx200(成功).ASPXAUTH
获取/SomePage.aspx302 (重定向)否.ASPXAUTH Cookie
这些都是跟一个请求一页在站点上的其他请求不带。ASPXAUTH cookie。
收起该表格展开该表格
方法响应Cookie
获取/SomePage.aspx302 (重定向)否.ASPXAUTH Cookie
获取/Login.aspx200 (成功)否.ASPXAUTH Cookie
开机自检/Login.aspx302 (重定向)否.ASPXAUTH Cookie
获取/SomePage.aspx200(成功).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 网站:
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://local
68 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,但未列出该 cookie在 IIS 日志中,检查 ISAPI 筛选器。您可能需要移除的筛选器,以查看是否问题已解决。

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 版中,并且具有在整个注释。此示例包括以下文件:
  • FormsAuthEvents.cs: 此类实现IHttpModule ,并且将绑定到Application_BeginRequest事件。
  • FormsAuthInfo.cs: 类检索 cookie 和解密 forms 身份验证票证。此外,它还会检查该应用程序的Web.config 文件,以确保该窗体的身份验证已启用。
  • FormsAuthConfig.cs: 类读取的信息FormsAuthLogger.config 文件。
  • Log.cs: 此文件可接受 stringbuilder,并将值写出到日志文件。
  • FormsAuthLogger.config: XML 文件中读取的 Log.cs 文件。这文件必须是使用生成的 DLL 的 /bin 文件夹中。该文件允许您向进行以下配置:
    • 通过 IP 筛选器: 您可以筛选数据的方式来捕获客户端 IP。这种方式,您可以从客户端的已知的记录仅请求重现此问题。这减少了日志的大小。
    • 捕获类型: 该选项用于指定要保存文件的位置。默认值为临时 ASP.NET 文件文件夹中,但您可以将它保存任何地方只要辅助进程帐户具有写入的能力文件夹。
注意我将提供的下载链接中提供的代码FormsAuthLogger.zip 文件。

我将指出的主要的区域:
  1. 创建一个实现IHttpModule接口的类。
    public class FormsAuthEvents : IHttpModule 
    {
    		…code…
    }
  2. 您想要查看的事件绑定。在此示例中,我们使用Application_BeginRequest事件。通过这种方式,我们可以研究每个请求,并确定如果该 cookie 有它有的窗体身份验证 cookie 和FormsAuthenticationTicket日志。
    public void Init(HttpApplication application) 
    {
    	//Wire up the BeginRequest event
    	application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. 实现Application_BeginRequest事件。
    private void Application_BeginRequest(Object source, EventArgs e)
    {	
       …code to log the ticket…
    }
    
  4. 检索窗体的身份验证 cookie,然后再对解密它。
  5. 记录的值。我建议使用以下登录添加到窗体的信息。这将帮助您排列您的窗体将记录到 IIS 身份验证信息,如有必要:
    • 日期: 使您可以查看当请求中。
    • RequestType: 显示该请求是否具有 Get 或开机自检。
    • 网址: 显示的模式导致此问题的请求。
    • 引用站点
    • ClientIP: 为特定的请求中的纽带客户端。

与以往一样,随意提交所需的主题的意见在今后的专栏中或在知识文库中使用处理 诚征意见 表单。

属性

文章编号: 910439 - 最后修改: 2013年5月30日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
关键字:?
kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 910439
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com