2012-03-02 16 views
1

ログインに同じクッキーを使用する2つのサイトがあります。シングルサインオンWebサイト - MVC 3

私が気付いている問題は、両方のサイトが全く異なる設計であり、サイトの1つがログイン機能を処理し、もう1つが単純に他のユーザー名/パスワードの投稿を行うことですバックエンドにクッキーを作成します。

私はこの機能を持っていますが、実際にログインプロセスを完了するために他のサイトに行くことなく、ログインが成功したか失敗したかを他のサイトに通知するにはどうすればいいですか?

これはうまくいきますが、私は他のウェブサイトの投稿をどのように処理しなければならないのかと、私が困惑する返事として何を返すべきかという問題です。

どのようなアイデアや代替ソリューションが大きな助けになりますか?

[HttpPost] 
public ActionResult FormPost(LogOnModel model) 
{ 
WebRequest request = WebRequest.Create(strServer); 

      // Set the Method property of the request to POST. 
      request.Method = "POST"; 
      // Create POST data and convert it to a byte array. 
      byte[] byteArray = Encoding.UTF8.GetBytes("password=" + model.Password); 
      // Set the ContentType property of the WebRequest. 
      request.ContentType = "application/x-www-form-urlencoded"; 
      // Set the ContentLength property of the WebRequest. 
      request.ContentLength = byteArray.Length; 
      // Get the request stream. 
      Stream dataStream = request.GetRequestStream(); 
      // Write the data to the request stream. 
      dataStream.Write(byteArray, 0, byteArray.Length); 
      // Close the Stream object. 
      dataStream.Close(); 

      // Get the response. 
      WebResponse response = request.GetResponse(); 
      // Get the stream containing content returned by the server. 
      dataStream = response.GetResponseStream(); 
      // Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 
      // Read the content. 
      string responseFromServer = reader.ReadToEnd(); 
      // Clean up the streams. 
      reader.Close(); 
      dataStream.Close(); 
      response.Close(); 

TempData["Response"] = responseFromServer; 

return View(); 
+1

共有[WebService](http://msdn.microsoft.com/en-us/library/t745kdsh.aspx)のメリットがあります。 – jrummell

答えて

1

あなたは認証アクションによって送信され、単に要求を行って、実際のユーザーが自分のブラウザでこのクッキーを取得することができるように、レスポンスにそれらを追加したクッキーをキャプチャすることができます:

[HttpPost] 
public ActionResult FormPost(LogOnModel model) 
{ 
    using (var client = new WebClient()) 
    { 
     var data = new NameValueCollection 
     { 
      { "username", "foo" }, 
      { "password", "bar" }, 
     }; 
     var result = client.UploadValues("http://localhost:1631/account/logon", data); 
     var cookie = client.ResponseHeaders[HttpResponseHeader.SetCookie]; 
     Response.AddHeader("Set-Cookie", cookie); 
    } 
    return View(); 
} 

しかし、一般的に使用認証サービスは、スクリーンスクレイピングを行う代わりに、はるかに良いアイデアのように思えます。

0

同じCookieドメインが使用されていると仮定すると、単にajaxリクエストを使用して他のサイトに資格情報を送信できます。成功すればコントローラはajaxの結果を返します。 MVC4テンプレートは、ajaxスタイルのログインを提供するので、チェックしてください。

+0

私はこのような考えをしていましたが、私はバックエンドに投稿を保持したいと思います。必要不可欠なのは、私が処理できる文字列です。これをどうやって確認するのか? – Sparkle

+0

mvc4テンプレートをチェックアウトする - jquery .ajax()コールを使い、postメソッドを指定して、チェックアウトしてください:http://stackoverflow.com/questions/7296470/how-to-login-through-ajax-in-asp -net-mvc-3 –

関連する問題