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 просто не подходит для аутентификации при использовании страницы авторизации токена.

0 ответов

Другие вопросы по тегам