Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запрос с перенаправлением, как организовать?


Автор: KPEHDEL 30.7.2013, 17:55
Здравстуйте.
Задача:
Пользователь авторизуется на одном сайте. Затем пользователь нажимает на ссылку в меню, должно произойти перенаправление передаться одно значение(логин) и авторизация в другом месте.
1. Это разные сервера, сессии не подойдут.
2. Желателен запрос POST.
3. Адрес в браузерной строке должен меняться, чтобы пользователь мог далее перемещаться по сайту в авторизованном состоянии.

Случай:
Есть сайт, есть форум. Требуется, чтобы авторизация была единой для пользователя. т.е. с сайта переходит на форум и видит, что он там авторизован. Первый сайт никак не взаимодействует с БД второго и второй соответственно.
Требуется передавать только логин пользователя.

GET не подходит, по причинам открытости.
Делал POST с перенаправлением, с помощью curl, но тогда ссылка в браузере не меняется.

Подскажите пожалуйста, как решить данную задачу, примеры приветствуются.

С нетерпением жду ответа.
Заранее спасибо.

Автор: Gromdron 31.7.2013, 00:16
Если совсем разные, к примеру forum.ru и site.ru то не вижу путей.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51f7d43e6ccc198719000002#findElement_E7045_51f82d306ccc19591a003ed0_0

Автор: Arantir 31.7.2013, 00:57
Проблема в том, что сессии держаться на куках. А для совсем разных доменов куки не пересекаются. Как минимум это должны быть поддомены того домена, который ставил куки.

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

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


а вот с доменами вида example.com и forum.example.com все намного проще - достаточно на первом поставить для кук домен вида ".example.com" и куки (в том числе кука с ID сессии) будут доступны и на forum.example.com.

Автор: Fortop 31.7.2013, 01:47
Цитата(Gromdron @  31.7.2013,  00:16 Найти цитируемый пост)
Если совсем разные, к примеру forum.ru и site.ru то не вижу путей.

Рекомендую посмотреть как работает авторизация по фейсбук или вконтакте логинам на других сайтах.

Автор: Чучмек 31.7.2013, 13:09
Надо  добавлять разовый код идентификации.
При авторизации на сайте А  генеририруется код идентификации authorization_key.
Сохранили user=>authorization_key.
authorization_key добавляется к ссылке на сайт Б (или в <input type="hidden">)
Сайт Б, если получает authorization_key для неавторизованного пользователя, делает запроса на А, который в свою очередь подтверждает соответствие user и authorization_key.
В ответ на подтверждение, Б авторизует пользователя и аннулирует authorization_key.

Добавлено через 5 минут и 26 секунд
p.s.
Цитата(KPEHDEL @  30.7.2013,  17:55 Найти цитируемый пост)
Первый сайт никак не взаимодействует с БД второго и второй соответственно.

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

Автор: KPEHDEL 31.7.2013, 15:04
Благодарю всех за ответы. Буду думать.
Цитата

При авторизации на сайте А  генеририруется код идентификации authorization_key.

Цитата

В ответ на подтверждение, Б авторизует пользователя и аннулирует authorization_key.


Подобный алгоритм с аннулированием предполагает, что key, всегда будет разным для одно пользователя, т. к. если он всегда будет одинаковым, то в аннулировании нет смысла. Любой человек, у которого будет ссылка с этим key, сможет авторизоваться.
Можно конечно создать таблицу на сервере A. В которой будет храниться сгенерированный hesh/key и соответствующее ему случайным словом, которое делает его уникальным.
На сайте B при приходе запроса с ключём, находить в таблице по ключу, брать случайное слово, добавлять к остальным данным и сверять. После успешной авторизации удалять поле.
Это вроде похоже на вариант, но тогда надо отбросить пункт:
Цитата

Первый сайт никак не взаимодействует с БД второго и второй соответственно.

Возможно так и стоит сделать.

Цитата

а вот с доменами вида example.com и forum.example.com все намного проще - достаточно на первом поставить для кук домен вида ".example.com" и куки (в том числе кука с ID сессии) будут доступны и на forum.example.com.

Одних кук будет мало, если поддомен на другом сервере. Хотя можно с куками сделать примерно также, как с описанным вариантом выше.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)