Единая регистрация на сайтах - MVC 3 - PullRequest
1 голос
/ 02 марта 2012

У меня есть два сайта, которые я использую один и тот же файл cookie для входа в систему, который работает нормально.

Проблемы, с которыми я сталкиваюсь, заключаются в том, что оба сайта совершенно разные по дизайну, и я хотел бы, чтобы один из сайтов обрабатывал функции входа в систему, а другой - просто отправлял имя пользователя / пароль длядругой и создайте куки в бэкэнде.

У меня есть эта функция, но проблема в том, как уведомить другой сайт об успешном входе в систему или об ошибке, не перейдя на другой сайт для завершения процесса входа?

Iсоздали что-то вроде этого, которое работает нормально, но это вопрос о том, как я должен обработать сообщение на другом веб-сайте и что я должен вернуть в качестве ответа, который озадачивает меня.

Любые идеи или альтернативные решения очень помогли бы мне!

[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();

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Вы можете захватить файлы cookie, отправленные действием аутентификации, и просто добавить их в ответ, чтобы фактический пользователь, выполнивший запрос, получил этот файл cookie в своем браузере:

[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 голосов
/ 02 марта 2012

Вы можете просто использовать ajax-запрос для отправки учетных данных на другой сайт, при условии, что используется тот же домен cookie. Ваш контроллер в случае успеха вернет результат ajax. Проверьте шаблоны MVC4, поскольку они обеспечивают вход в систему в стиле ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...