| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Кроссдоменная авторизация |
| Автор: maxipub 6.9.2010, 22:18 | ||||
| Желательно, чтоб все работало быстро, незаметно для пользователя, и работало везде - по максимуму вне зависимости браузера или настроек. Яндексил, гуглил весь вечер, у нас и "у них". Ничего подходящего... Как быть, какие есть идеи? Пытался подсмотреть как это сделано у того же Яндекса (авторизируешься на yandex.ru, заходишь на my.ya.ru - и ты там уже залогинен), но что-то так ничего и не понял. Судя по всему, проверка авторизации на my.ya.ru каким-то макаром проходит уже когда начинаешь туда ломиться. На одном из западных ресурсов, кстати, видел вариант типа
a.php:
Ну более ничего написано не было, но насколько я понял, на go-to-our-auth.com, соответственно, предполагается что пользователь предварительно авторизировался (типа главный сайт, куда ведут все авторизационные формы или просто ссылка "войти"). Если пользователь там уже залогинен, то идет попытка установить авторизационные куки для домена реферера, если нет - ставятся пустые (чтоб редирект не циклился). После чего переадресовываем пользователя обратно. На первый взгляд, вроде бы ничего... но все же несколько криво, как по мне. Лучше будет ставить куки для нужных доменов сразу, в момент авторизации на любом из доменов. Наиболее оптимальным вариантом мне казалась установка javascript-инклудов на нужные домены, там php генерит их и попутно расставляет нужные куки. Но как начал проверять, оказалось что такие вещи довольно охотно блокируются различными утилитами по повышению уровня безопасности. Можно пробовать через картинки, по аналогии. Но тут надо будет дополнительно отслеживать на javascript процесс загрузки этих картинок, чтоб иметь хоть какое то представление о успешности процесса. А если авторизация по каким-либо причинам не удалась, как в этом случае донести инфу до пользователя? Я уже смотрел даже в сторону кроссдоменного AJAX, но что-то мне идти по этому пути вообще не захотелось. У кого будут какие предложения? Как заавторизировать пользователя на нужных доменах при его логине на одном из них? |
| Автор: Muerto 6.9.2010, 22:34 |
| Вам Curl осваивать нужно, поищите "curl login" даст именно то что нужно ... |
| Автор: gta4kv 6.9.2010, 23:59 | ||||
| Я бы посоветовал поснифать заголовки авторизации гугла (Live Http Header), там достаточно легко примерно понять реализацию, я над такой задачей думал, в своё время. Самое простое - сделать домен авторизации, пусть будет: http://auth.ru/ Форма авторизации будет вести на:
В итоге auth.ru, если на нем установлена авторизация, будет нас возвращать пост запросом на my-super-service.ru/loginsuccess/ передавая, например уникальный id сесси или что нибудь типа того. Это давние мысли, вероятно где то ошибаюсь. Добавлено через 6 минут и 23 секунды
Авторизация происходит на одном домене, а не на каждом - в том и смысл. |
| Автор: gta4kv 7.9.2010, 00:09 | ||||
Куки повесить можно только на один домен, на котором всё это происходит. (http://auth.ru) Пример по-гуглу — я зашел в почту - мэйл.гугл.ком, я сразу буду залогинен на гугл.ком, ибо кука ставится на *.гугл.ком, но зайдя на ютюб мне сначала придется в любом случае пройти по ссылке, что бы он (гугол) проверил авторизацию на главном домене. Добавлено через 1 минуту и 24 секунды а если я на ютюбе нажму "выйти" до кука сотрётся именно с *.google.com Добавлено через 1 минуту и 49 секунд
Добавлено через 2 минуты и 5 секунд (cмотри фулл линк) |
| Автор: maxipub 7.9.2010, 00:14 | ||||
Да ну!?
Но мне хотелось бы по возможности что-то более красивое и предсказуемое. Ну и чтоб этот процесс был контролируем - с обратной связью. А если у кого, вдруг, опыт есть на реальных разработках - вообще отлично. |
| Автор: gta4kv 7.9.2010, 00:33 |
| Вариант с картинками ущербный. |
| Автор: maxipub 7.9.2010, 00:42 |
| Автор: gta4kv 7.9.2010, 00:51 | ||
При убитых картинках с такой системой мы получим ровно ничего. Я привожу вам реальные примеры с гугла, потому, что там уж точно все продумано и соответственно это лучший образец в какую сторону копать. Почти у любой другой реализации всегда есть большие подводные камни. |
| Автор: Muerto 7.9.2010, 01:00 |
| maxipub, Ну я конечно когда вам про curl написал имел совсем другое, но все же, не вижу причины по которой с помощи курл нельзя было взять куку с сервера, и с помощи этой куки сделать логин и вывести страницу... Возможно я что то упускаю, но вроде у курл и файл куки можно указать который берется с сервера,и точный ход входа к примеру сейчас сделаем get это эээто и это, а затем post post , и попадем куда надо,и там что то парсим, или просто выводим страницу... Зависит что именно нужно... Конечно если просто перекинуть по session id нужно, то наф здесь curl не понятно, но и как сделать увы хз( нужно в гугль идти) |
| Автор: maxipub 7.9.2010, 01:03 | ||||||
Простите, а при чем тут это? Почему они вообще должны быть убитыми? С такими рассуждениями, при "убитых ссылках и на гугле..." будет тот же эффект, в чем разница? И вообще, вы же только говорили, что
а тут уже "картинки" не нравятся. Да и вообще, если гугл проводит авторизащию с переадресацией (я не смотрел, но что-то мне подсказывает что там идет авторизация по SSL, так что вполне реально что лучше и переадресовать для избежания лишних конфузов), то это же не значит что всем так надо делать? А если у меня 30 доменов, это будет 30 переадресаций? Или 60? Благодарю за помощь, но мне хочется именно так: авторизация на неком auth.ru => одновременная авторизация и на остальных доменах. Вот варианты, как это лучше сделать, я и хотел бы рассмотреть. ЗЫ: если вам не сложно, могли бы копнуть яндекс, как там все устроено? Мне он в данном плане интересней, т.к. как минимум нет этих переадресаций. А то я сейчас на казенном компе, ни заголовки, ни куки толком не глянуть. Добавлено через 5 минут и 23 секунды
Конечно можно, но что нам это дает? Как именно отследить, какому из юзеров какая кука (да и вообще зачем она нам нужна если мы сами ее и формируем? Вот смотрите, на странице a1.ru выдается ссылка на некую страницу a2.ru/oops.php, авторизированный на a1.ru пользователь кликает на нее, и... как на oops.php определить теперь что это за пользователь и какой его юзеради? |
| Автор: Muerto 7.9.2010, 01:57 | ||
А вы проект для гостей планируйте, в нем пользователей не будет? Берем id сессии, и берем соответствующие файлы куки, и подставляем их и делаем логин где хотим Если же один куки на всех, то вообще и проблем нету |
| Автор: cutwater 7.9.2010, 08:23 |
| Вставлю свои 5 копеек =) Есть еще такая замечательная технология - OpenID, я думаю будет полезно разобраться с ее механизмом. Хотя прозрачно для пользователя сделать вряд ли получится. |
| Автор: maxipub 7.9.2010, 10:34 |
| Muerto, это все замечательно. У нас есть сайты s1.ru, s2.ru, s3.ru... человек логиниться на s1.ru, как нам при этом установить ему куки на s2.ru, s3.ru... вот в чем главный вопрос. cutwater, забыл сразу упомянуть, openid и иже с ними не устраивают. Ищется именно решение для установки кук под список доменов. |