我正在建立一个姐妹网站。我希望我的登录用户能够登录到姊妹站点。
用户被输入到两个数据库中并具有匹配的令牌(guid)。
我通过 httpwebrequest 在一个令牌认证页面中将令牌发布到姊妹站点。姐妹站点使用匹配的令牌从数据库中定位用户。
(到目前为止,一切都很好)
token-auth 页面(通过 httpwebrequest)应该设置我的表单身份验证检查的 cookie。(然后页面会重定向到姊妹站点,并且用户应该已登录。)
问题是最后一部分。token-auth 页面没有通过 httpwebrequest 设置 cookie。因此,表单身份验证失败并出现用户登录。
我通过 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
身份验证令牌页面
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 只是不在那里进行身份验证。