2009-10-05 4 views
0

У нас есть сайт, созданный в .NET 3.5 с мультиплексированным поставщиком членства/роли и связанный сайт PHP (на другом сервере), который использует одни и те же пользователи (или частично по крайней мере) и мы изучаем возможность использования единого входа, и мне интересно, работают ли другие, что-то вроде этого.Одиночный вход ASP.NET и 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-сайт, я все еще не вошел в систему, что, конечно же, имеет какое-то отношение к сеансу, но я просто не могу понять, как правильно его перенести.

+0

Мы также пытаемся сделать концепцию единого входа между .NET и PHP-сайтами. Как мы можем это сделать, можно ли использовать SAML, OPENID? Это бесплатно или нужно покупать? Это проблема безопасности? Предложите шаги внедрения и где я скачал его? – Thilak

ответ

3

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

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

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

Смежные вопросы