1

姉妹サイトを作成中です。ログインしているユーザーが姉妹サイトにログインできるようにしたい。

ユーザーは両方のデータベースに入力され、一致するトークン (guid) を持っています。

姉妹サイトへの httpwebrequest を介してトークン認証ページにトークンを投稿しています。姉妹サイトは、一致するトークンを使用してデータベースからユーザーを見つけます。

(ここまでは順調ですね)

トークン認証ページ (httpwebrequest 経由) は、フォーム認証がチェックする Cookie を設定することになっています。(その後、ページは姉妹サイトにリダイレクトされ、ユーザーはログインする必要があります。)

問題は最後の部分です。Cookie は、httpwebrequest を介して token-auth ページによって設定されていません。したがって、フォーム認証は失敗し、ユーザー ログインが表示されます。

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は認証に対して存在しません。

4

0 に答える 0