Единый вход в несколько доменов
В настоящее время я пытаюсь объединить 2 веб-приложения на разных доменах example1.com и ex.example2.net, чтобы вы могли войти в example1 и щелкнуть ссылку на example2 и мгновенно войти в систему, так как это будет удобнее для клиентов. просто войти один раз и перемещаться между сайтами.
Я исследовал различные способы, т.е. php-сессии, openID, JOSSO и Kerberos, но что может быть безопасным и простым способом реализовать это?
4 ответа
Вы можете иметь одно приложение, обрабатывающее логины для обоих сайтов, используя сеансы php.
Пользователь example1.com входит в систему и сохраняет cookie сессии php.
ex.example2.net проверьте example1.com и проверьте сессионный cookie. если он не существует, перенаправьте на страницу входа в example1.com или на другую страницу входа в систему на example1.com. Если он существует, зарегистрируйте пользователя на ex.example2.net.
Если вам нужна только ссылка, вы генерируете хеш и передаете его второму приложению, как только оно вошло в первое. Если хеш проверяется, войдите в систему.
Kerbros очень обширный и для систем, требующих высокой безопасности. С ним очень трудно работать, и даже просто настраивать все вместе, я бы не советовал этот маршрут, если вы не очень хорошо знаете Linux, и при условии, что ваш хостинг-провайдер разрешает вам этот тип доступа через компьютер.
Я не достаточно знаком с JOSSO или openID, чтобы хорошо прокомментировать их.
Любые сеансы php полезны только для домена, и сервер, на котором домен включен, вроде куки, но не так, хотя во всех вы бы их использовали.
Я думаю, что ваше самое простое решение больше, если 2 сайта находятся на одной учетной записи / сервере хостинга. Иметь базу данных, специфичную для этой причины. Что бы вы сделали, это создали бы систему входа в систему, как обычно, но вместо этого у вас было бы 2 сайта, считывающих это имя входа. Помимо обычного входа в систему у вас также будет таблица отслеживания сеансов. Обычно вы уже устанавливаете сеансы, когда пользователи входят в систему, чтобы держать их в системе, и вы делаете то же самое здесь, но вы добавляете cookie в уравнение, которое оба сайта могут распознать и использовать для сравнения записей в этой новой таблице, где вы отслеживаете ваши пользователи. Я бы сказал, продолжайте попытки по IP, Browser и, возможно, по идентификатору пользователя все в одном cookie с каким-то уникальным хешем, специфичным для пользователя, на основе чего-то, что только серверы могут воссоздать на основе информации, которую они имеют для пользователя.
Конечно, я не говорю об этом в концептуальном плане, это немного сложнее, чем я себе представляю, но это будут ваши основные ступени.
Кроме того, если сайты независимы друг от друга, вы всегда можете создать API между ними для передачи информации в стиле JSONP и обратно, чтобы один мог выступать в качестве хаба для входа в систему, тогда как другой просто проверял
Но в целом все зависит от того, что вы хотите сделать в целом, как, когда, где и т. Д.
Если это работает для вас, я бы предложил пойти по маршруту openID. Это более простой способ и достаточно безопасный. Кроме того, процесс регистрации проще и быстрее для пользователей.
На самом деле вы можете разрешить только идентификаторы из ваших доменов входа, если вы предпочитаете, что делает его в значительной степени "частной" системой входа.
Есть и недостатки... У вас нет точного контроля над процессом регистрации, вы зависите от процесса авторизации openID... Есть некоторые проблемы, которые могут возникнуть, если ваш хост настроен неправильно (например, различия часовых поясов),
Но в целом это относительно безопасная система, которую легко внедрить.
Kerberus чрезвычайно безопасен, но работать с ним - кошмар. Если вы не имеете дело с конфиденциальной пользовательской информацией, такой как номера кредитных карт, или думаете, что ваши веб-сайты ставят аппетитные цели для взлома, я не думаю, что это стоит вашего времени.
Я хотел бы использовать таблицу базы данных, которая разделяется между двумя сайтами. Если вы идете по маршруту сеанса PHP, не пытайтесь просто передать данные сеанса с одного сайта на другой по отдельным доменам, это не сработает. Я нашел этот пост полезным много месяцев назад: единый вход в нескольких доменах