C# 表单身份验证在本地工作,但不在dev服务器上工作
我知道表单身份验证很旧,但当我使用IIS Express在本地运行web应用程序时,一切都很好。但当我将其发布到开发/测试服务器时,它只是重新加载页面。开发服务器正在运行IIS 6 还要注意的是,它在本地以localhost:50264/Login运行。在dev服务器上,url更像 我注意到两个cookie都有路径“/”。我确实尝试通过在本地web.config中设置以下内容来设置更改:C# 表单身份验证在本地工作,但不在dev服务器上工作,c#,asp.net-mvc,iis,asp.net-mvc-5,forms-authentication,C#,Asp.net Mvc,Iis,Asp.net Mvc 5,Forms Authentication,我知道表单身份验证很旧,但当我使用IIS Express在本地运行web应用程序时,一切都很好。但当我将其发布到开发/测试服务器时,它只是重新加载页面。开发服务器正在运行IIS 6 还要注意的是,它在本地以localhost:50264/Login运行。在dev服务器上,url更像 我注意到两个cookie都有路径“/”。我确实尝试通过在本地web.config中设置以下内容来设置更改: <add key="CookiePath" value="/" /> 当我部署到dev服务器
<add key="CookiePath" value="/" />
当我部署到dev服务器时,我检查了那里的web.config,它正确地转换了forms节点
当我进入登录时,我输入我的凭证,它仍然刷新登录页面。使用Chrome扩展名“EditThisCookie”,我仍然可以看到cookie的路径是“/”。它根本没有意识到变化。即使我手动将authTicket path的路径设置为“/op”,cookie的路径仍然是“/”。我不知道发生了什么事。呃…我也使用表单身份验证,这是我的设置。您没有显示所有表单身份验证代码,但希望这将为您指明正确的方向 Web.Config
<authentication mode="Forms">
<forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
然后我测试它们是否在所有需要用户登录的页面上都经过身份验证
If Request.IsAuthenticated Then
Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
If ident IsNot Nothing Then
Dim ticket As FormsAuthenticationTicket = ident.Ticket
Dim userDataString As String = ticket.UserData
Select Case ticket.UserData
Case "Member"
m_MemberLoggedIn = ident.Name
Case Else
Response.Redirect("~/members/login/", True)
End Select
Else
Response.Redirect("~/members/login/", True)
End If
9/29更新:
检查以确保IIS身份验证模式设置为匿名我也使用表单身份验证,以下是我的设置。您没有显示所有表单身份验证代码,但希望这将为您指明正确的方向 Web.Config
<authentication mode="Forms">
<forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
然后我测试它们是否在所有需要用户登录的页面上都经过身份验证
If Request.IsAuthenticated Then
Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
If ident IsNot Nothing Then
Dim ticket As FormsAuthenticationTicket = ident.Ticket
Dim userDataString As String = ticket.UserData
Select Case ticket.UserData
Case "Member"
m_MemberLoggedIn = ident.Name
Case Else
Response.Redirect("~/members/login/", True)
End Select
Else
Response.Redirect("~/members/login/", True)
End If
9/29更新:
检查以确保将IIS身份验证模式设置为匿名我采取了简单的方法,要求我们的IT部门创建一个子域,以便cookie的路径始终为“/”。不是答案,但我就是这么做的。我用简单的方法让我们的it部门创建一个子域,以便cookie的路径始终为“/”。不是答案,但我就是这么做的。什么是
CookiePath
?它与表单cookie的关系如何?它看起来不像是内置基础设施的一部分。无论它是本地的还是在开发服务器上,它都有正确的域,但路径始终是“/”您在这里看到的是从appSettings
部分删除的内容。我想告诉你的是,没有一种内置的机制,这种任意设置与表单身份验证相关。什么是CookiePath
?它与表单cookie的关系如何?它看起来不像是内置基础设施的一部分。无论它是本地的还是在开发服务器上,它都有正确的域,但路径始终是“/”您在这里看到的是从appSettings
部分删除的内容。我想告诉你的是,没有任何内置机制可以让这种任意设置与表单身份验证相关。因为你似乎在使用WebForms,这里有一个指向WebForms授权上的文档的链接。每个页面都没有检查,只是需要授权的页面(表单身份验证就是这样工作的)。OP的问题是关于表单身份验证和他面临的问题。这不是一个关于如何处理身份验证的最佳方法的问题,这将是一个漫长的讨论。我对web配置和身份验证票证进行了更改,但这对开发服务器没有任何帮助。@henry,这就是为什么我评论您的答案,而不是回答OP的问题。你的回答促进了糟糕的方法,因为你似乎要重做一些现成的东西。在我15年的企业asp.net编码生涯中,我从来没有见过有人自己这样做。@ajtatum您能在web中发布其余的代码和当前设置吗?配置由于您似乎正在使用WebForms,这里有一个指向WebForms上的文档的链接授权每个页面都不检查,只检查需要授权的页面(表单身份验证就是这样工作的)。OP的问题是关于表单身份验证和他遇到的问题。这不是关于如何处理身份验证的最佳方法的问题,这将是一个漫长的讨论。我对web配置和身份验证票证进行了更改,但这对开发服务器没有任何帮助。@henry这就是为什么我对您的答案发表评论。@rA而不是回答OP的问题。你的回答会助长错误的做法,因为你似乎要重做一些现成的东西。在我15年的企业asp.net编码生涯中,我从来没有见过有人独自完成这些工作。@A你能在web.config中发布其余的代码和当前的设置吗
var authTicket = new FormsAuthenticationTicket(
1,
user.Email,
DateTime.Now,
DateTime.Now.AddDays(14),
true,
userData,
FormsAuthentication.FormsCookiePath);
<authentication mode="Forms">
<forms loginUrl="members/login.aspx" name=".ASPXFORMSAUTH" requireSSL="false" slidingExpiration="true" timeout="120" />
</authentication>
Dim authCookie As HttpCookie = FormsAuthentication.GetAuthCookie(iMembersID, False)
Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
Dim newTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, "Member")
authCookie.Value = FormsAuthentication.Encrypt(newTicket)
Response.Cookies.Add(authCookie)
If Request.IsAuthenticated Then
Dim ident As FormsIdentity = CType(User.Identity, FormsIdentity)
If ident IsNot Nothing Then
Dim ticket As FormsAuthenticationTicket = ident.Ticket
Dim userDataString As String = ticket.UserData
Select Case ticket.UserData
Case "Member"
m_MemberLoggedIn = ident.Name
Case Else
Response.Redirect("~/members/login/", True)
End Select
Else
Response.Redirect("~/members/login/", True)
End If