IE和ASP.NET的IPv6范围ID问题

时间:2011-01-10 16:42:09

标签: asp.net identity ipv6

设置:

  

域中的两台W2K3计算机同时安装了IPv6。应用程序在机器#1上。

什么适用于IE8:

  

机器#2可以使用IPv4地址(http://192.168.../app)登录应用程序   机器#2可以使用机器名称(http://machine1name/app)登录应用程序   机器#1可以使用IPv4地址,机器名称和本地主机登录应用程序。   机器#1可以使用本地IPv6地址(没有scope-id)登录应用程序   机器#1可以使用网络IPv6地址(没有scope-id)登录应用程序。

什么不适用于IE8,适用于Firefox:

  

计算机#2无法使用计算机#1的网络IPv6地址(具有范围ID)登录应用程序。

原始问题:我试图缩小问题的范围。我可以打开登录页面并输入我的凭据。在代码中,我检查Active Directory以进行身份​​验证,并且用户确实已通过身份验证。但是,HttpContext.Current.User.Identity永远不会设置。它应该在我调用RedirectFromLoginPage(username)时设置,而当机器#2使用IPv4访问应用程序时。但是,当我使用IPv6地址时,HttpContext.Current.User.Identity始终为空。

使用IPv4时,身份验证和应用程序工作正常,所以我认为这不是代码问题,但不确定?或者我需要调整一些网络/ IE设置吗?

编辑:使用IPv6的Firefox和使用IPv4的IE8创建身份验证Cookie没有问题。出于某种原因,带有IPv6的IE8无法创建cookie,因此,RedirectFromLoginPage存在问题,该应该创建cookie。

编辑2 :使用IE时问题似乎是IPv6地址中的% [即。 scope-id]。例如,使用Firefox,您可以在地址中%没有问题。使用IE,如果您使用IPv6本地访问应用程序(无论是本地IP还是网络IP),您可以省略scope-id。但是,在网络计算机上访问应用程序时,您需要scope-id。从那以后 您必须使用%%25进行编码,这就是问题所在。

[PS。我知道this question有类似的标题,但这不是同一个问题。]

1 个答案:

答案 0 :(得分:0)

老实说,解决此问题的最佳方法是不使用链接本地地址作为Web端点。正如您所发现的那样,IPv6的这个领域是不明确的。

我建议使用静态IPv6地址。要么是这个,要么让您的网络管理员(您?)在您的子网上启用IPv6路由器通告,这样您就可以获得“真实”(链接本地)IPv6地址。

注意,您仍然可以使用“私有”IPv6空间(就像您使用192.168.0.0/16 IPv4地址一样)

如果您没有“真正的”IPv6子网,您可以使用编号为6to4的/ 64子网(如果您有真正的IPv4地址并且[最终]想要主持人参与“真正的”IPv6互联网)或获得unique local子网使用。

或者只是去寻找它并从Hurricane Electric这样的地方代理6in4隧道。