Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос с перенаправлением, как организовать? 
:(
    Опции темы
KPEHDEL
  Дата 30.7.2013, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 31.3.2010

Репутация: нет
Всего: нет



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

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

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

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

С нетерпением жду ответа.
Заранее спасибо.
PM MAIL WWW ICQ   Вверх
Gromdron
Дата 31.7.2013, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.9.2006

Репутация: 1
Всего: 1



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Arantir
Дата 31.7.2013, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



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

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

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


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

Это сообщение отредактировал(а) Arantir - 31.7.2013, 00:58


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Fortop
Дата 31.7.2013, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



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

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


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Чучмек
Дата 31.7.2013, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 4
Всего: 41



Надо  добавлять разовый код идентификации.
При авторизации на сайте А  генеририруется код идентификации 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 Найти цитируемый пост)
Первый сайт никак не взаимодействует с БД второго и второй соответственно.

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

Это сообщение отредактировал(а) Чучмек - 31.7.2013, 13:10


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
KPEHDEL
Дата 31.7.2013, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 31.3.2010

Репутация: нет
Всего: нет



Благодарю всех за ответы. Буду думать.
Цитата

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

Цитата

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


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

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

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

Цитата

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

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



Это сообщение отредактировал(а) KPEHDEL - 31.7.2013, 15:10
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.