asp.net кросс-сервер httpwebrequest cookie вход
Я строю родственный сайт. Я хочу, чтобы мой вошедший в систему пользователь мог войти на дочерний сайт.
Пользователь вводится в обе базы данных и имеет соответствующий токен (guid).
Я размещаю токен на странице авторизации токена через httpwebrequest на родственный сайт. Родственные сайты находят пользователя из базы данных с соответствующим токеном.
(Все идет нормально)
Предполагается, что страница авторизации токена (через httpwebrequest) устанавливает cookie, который проверяет моя проверка подлинности с помощью форм. (Затем страница выполняет перенаправление на дочерний сайт, и пользователь должен войти в систему.)
Проблема в последней части. Файл cookie не устанавливается страницей авторизации токена через httpwebrequest. Таким образом, проверка подлинности форм не проходит, и появляется логин пользователя.
Я вижу cookie из httpwebrequest через CookieContainer; однако это не сохраняется в куки на компьютере... и тогда аутентификация на перенаправлении терпит неудачу.
Кто-нибудь знает, как получить куки для сохранения через httpwebrequest? Это должно быть возможно правильно?
Вот некоторый код:
Страница 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 просто не подходит для аутентификации при использовании страницы авторизации токена.