asp.net跨服务器httpwebrequest cookie登录

时间:2013-05-01 18:56:36

标签: asp.net cookies httpwebrequest forms-authentication missing-cookies

我正在建立一个姐妹网站。我希望我的登录用户能够登录到姐妹网站。

用户进入两个数据库并具有匹配的令牌(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无法进行身份验证。

0 个答案:

没有答案
相关问题