我有一个较旧的ASP.NET WebForms应用程序正在尝试对用户进行身份验证。该应用程序在分期和生产中完美运行。但是,在尝试使用IISExpress进行本地调试时,它不会。
有一个用户控件放在包含登录服务器控件的母版页中。登录服务器控件具有自定义模板,并在 OnAuthenticate 事件期间调用 LoginControl_Authenticate 。还有一个名为 LoginControl_LoggedIn 的服务器事件在 OnLoggedIn 事件期间被调用。以下是这两种方法的代码:
Private Sub LoginControl_LoggedIn(ByVal sender As Object, ByVal e As System.EventArgs)
Response.Redirect("~/VerifyAuthentication.aspx", True)
End Sub
Private Sub LoginControl_Authenticate(ByVal sender As Object, ByVal e As AuthenticateEventArgs)
Dim loginCtrl As Login = CType(LoginContainer.FindControl("LoginControl"), Login)
Dim username As String = loginCtrl.UserName
Dim password As String = loginCtrl.Password
e.Authenticated = Membership.ValidateUser(username, password)
End Sub
然后,VerifyAuthentication.aspx页面应该验证用户并进行一些疯狂的配置文件填充。在 Page_Load 上,第一个语句是检查 User.Identity.IsAuthenticated 。同样,在本地,每次都返回 False 。但是,在生产中,它按预期工作。以下是此方法的摘录:
Private Sub Page_Load(s as Object, e as EventArgs)
If (User.Identity.IsAuthenticated = False) Then
...
End If
...
End Sub
web.config的配置如下:
<system.web>
<machineKey validationKey="..." decryptionKey="..." validation="SHA1"/>
<authentication mode="Forms">
<forms name=".ASPXAUTH" enableCrossAppRedirects="true" timeout="600" defaultUrl="/VerifyAuthentication.aspx" loginUrl="/" protection="All" slidingExpiration="true" domain="localhost" cookieless="UseDeviceProfile" />
</authentication>
<membership defaultProvider="DefaultSqlMembershipProvider">
<providers>
<clear/>
<add name="DefaultSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="60" passwordStrengthRegularExpression=""/>
</providers>
</membership>
...
</system.web>
作为旁注,IIS Express将此应用程序作为localhost:1800运行。
编辑(美国东部时间11.14.2013 10:00)
根据Scott的要求,我确实在Fiddler中验证了本地和生产版本。在这两个版本中,发回的响应都是Set-Cookie。但是,只有生产版本实际上是设置cookie(意味着.ASPXAUTH cookie出现在公共版本的cookie集合中)。
编辑(2013年11月14日美国东部时间上午11:30) 是。以下是响应和请求标头:
本地发展
登录:
Response sent 278 bytes of Cookie data:
Set-Cookie: .ASPXAUTH=AE66DCD41A34991EA27494478D779955ECE7AE3195BC5FE4F19085E9DC3307AF754D540A3B04504DBE65F79F1CFB3FA57780E807D4FA4D8BBD79E09A30BBE40BE4A8D76D26EC3F4FDD335A3667770E3CF7C8D8ACDD3E08B3D5A6B4F076EE5E638B6913DA774A662D300F9E1B554147F9E50D7B65; domain=localhost; path=/; HttpOnly
来自VerifyAuthentication.aspx
Request sent 42 bytes of Cookie data:
ASP.NET_SessionId=udyfmuy3xg5k3145khptvxer
生产
登录:
Response sent 291 bytes of Cookie data:
Set-Cookie: .ASPXAUTH=A34B5A519F2357269239544D4BFAE6DA30C9681F4F2C38D9574F747940C9F27F408AF2BB4A79437DFAB30E18E157D7C7291B1A4BFB98485C93F6427C6851737E8F3C35368A11C053BB5F9E48A0535D5178F10AB9E802C7956C80565F1B2CA042DE51228EF62CAB6B9E3AC748FDA87895B1C3D190; domain=mydomain.com; path=/; HttpOnly
来自VerifyAuthentication.aspx
Request sent 286 bytes of Cookie data:
ASP.NET_SessionId=ex03esugzcdjuk55tevnfq3o; .ASPXAUTH=A34B5A519F2357269239544D4BFAE6DA30C9681F4F2C38D9574F747940C9F27F408AF2BB4A79437DFAB30E18E157D7C7291B1A4BFB98485C93F6427C6851737E8F3C35368A11C053BB5F9E48A0535D5178F10AB9E802C7956C80565F1B2CA042DE51228EF62CAB6B9E3AC748FDA87895B1C3D190
答案 0 :(得分:3)
我的猜测是,它与.config中的“localhost”有关。