我正在建立一个姐妹网站。我希望我的登录用户能够登录到姐妹网站。
用户进入两个数据库并具有匹配的令牌(guid)。
我将令牌身份验证页面中的令牌通过httpwebrequest发布到姐妹网站。 姐妹站点使用匹配的令牌从数据库中查找用户。
(到目前为止一直很好)
token-auth页面(通过httpwebrequest)应该设置我的表单身份验证检查的cookie。 (然后页面会重定向到姐妹站点,用户应该登录。)
问题是最后一部分。 Cookie不是由token-auth页面通过httpwebrequest设置的。 因此,表单身份验证失败并显示用户登录。
我通过CookieContainer从httpwebrequest看到了cookie;但它没有保存到计算机上的cookie中......然后重定向的身份验证失败。
任何人都知道如何通过httpwebrequest获取Cookie?这可能是对的吗?
以下是一些代码:
HttpWebRequest页面(加载时)
Dim baseURL As String = "http://localhost:5894"
Dim poststring As String = String.Format("token={0}", u.toolkit_token)
Dim url As String = baseURL & "/GetAuthToken.aspx"
Dim cookies As CookieContainer = New CookieContainer()
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
req.Accept = "*/*"
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.AllowAutoRedirect = False
req.CookieContainer = cookies
Dim bytedata() As Byte = Encoding.UTF8.GetBytes(poststring)
req.ContentLength = bytedata.Length
Dim rs As Stream = req.GetRequestStream()
rs.Write(bytedata, 0, bytedata.Length)
rs.Close()
Dim res As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)
Dim sr As Stream = res.GetResponseStream()
Dim result As String = String.Empty
Dim reader As New StreamReader(sr)
result = reader.ReadToEnd
If result = "200" Then
Response.Redirect(baseURL)
Else
Response.Write("Error: Token Not Authorized.")
End If
Auth-Token页面
If Not Request.Form("token") Is Nothing Then
Dim u As BusinessLayer.DataContainer.oUser = Nothing
u = BusinessLayer.BusinessObject.GetUserByToken(Request.Form("token"))
If u IsNot Nothing Then
'-----Set Cookie
Dim cookie As HttpCookie = Nothing
Dim _CookieId As String = Guid.NewGuid().ToString() & "-" & Guid.NewGuid().ToString()
Call BusinessLayer.BusinessObject.UpdateUsersCookieId(_CookieId, u.id)
cookie = New HttpCookie("KeepSignedIn")
cookie.Values.Add("KeepSignedIn", "True")
cookie.Values.Remove("CookieId")
cookie.Values.Add("CookieId", _CookieId)
cookie.Expires = Now.AddYears(1)
Response.Cookies.Add(cookie)
'---------------
Response.Write("200")
End If
End If
请告知如何获取Auth-Token页面以将其cookie保存到文件系统。 这是一个跨域问题吗?你怎么会这样呢?
我还应该注意,如果我直接从网站登录,而不是使用令牌页面,则表单身份验证使用cookie。我已经使用了这段代码多年了。我确定这不是问题。使用token-auth页面时,cookie无法进行身份验证。