Единый вход ASP.NET и PHP - PullRequest
       13

Единый вход ASP.NET и PHP

0 голосов
/ 05 октября 2009

У нас есть сайт, созданный в .NET 3.5 с мультиплексным поставщиком членства / роли, и подключенный сайт PHP (на другом сервере), на котором используются одни и те же пользователи (или частично по крайней мере), и мы рассматриваем возможность использования единый вход, и мне интересно, если другие сделали что-то подобное, что работает.

Когда аутентификация сайта PHP завершена, он устанавливает переменную сеанса с идентификатором пользователя, а затем перенаправляет пользователя на стартовую страницу.

В будущем это означает, что пользователь всегда входит в систему на сайте ASP.NET, поэтому я попытался аутентифицироваться на сайте PHP одновременно с ASP.NET. Чтобы иметь возможность использовать пароль пользователя, я добавил логику метода ValidateUser в membershipprovider:

                HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
                string data = string.Format("username={0}&password={1}", MembershipHelper.UrlEncode(username), MembershipHelper.UrlEncode(password));
                req.Method = WebRequestMethods.Http.Post;
                req.ContentLength = data.Length;
                req.ContentType = "application/x-www-form-urlencoded";
                req.AllowAutoRedirect = false;
                req.CookieContainer = new CookieContainer();

                StreamWriter w = new StreamWriter(req.GetRequestStream());
                w.Write(data);
                w.Close();

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

1 Ответ

3 голосов
/ 05 октября 2009

Код, который вы показали, выполняет запрос на стороне сервера к сайту PHP и передает имя пользователя и пароль для выполнения аутентификации. Вы также используете контейнер cookie для хранения cookie сеанса, созданного сайтом PHP.

Если аутентификация прошла успешно, вам придется извлечь cookie-файл сеанса из контейнера (используя метод GetCookies ) и отправить его в ответ на странице ASP.NET (используя AppendCookie ). Таким образом, cookie будет храниться в браузере клиента (вместо временного контейнера cookie). После сохранения файла cookie в браузере пользователя он будет автоматически отправлен вместе со следующим запросом на сайт PHP (при условии, что этот сайт находится в том же домене, что и ваш сайт ASP.NET), и вы войдете в систему.

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

...