Аутентификация и вход на 2 сайта - PullRequest
0 голосов
/ 29 марта 2010

У меня есть 2 сайта: example.com и exampletwo.com

Я хочу, чтобы при входе пользователя на example.com он автоматически проходил аутентификацию и на exampletwo.com

Как я могу это сделать? Я использую Django + Nginx на первом веб-сайте и фреймворк Tornado + сервер Tornado на втором веб-сайте.

Спасибо;)

.

P.S. Если вы не знаете этих платформ (Django, Tornado или Nginx), я также приму решение для универсальной платформы PHP + Apache, а затем проведу некоторые исследования:)

Ответы [ 3 ]

1 голос
/ 29 марта 2010

Я хотел бы, чтобы код, обрабатывающий регистрацию пользователя на example.com, немедленно отправлял запрос https на exampletwo.com (который, конечно, проверяет его на основе сертификатов), означая "добавить этого пользователя с этими учетными данными". Этот подход представляется работоспособным для любых двух веб-серверов / сред / языков, если они могут отправлять и получать HTTPS-запросы и проверять подлинность сертификатов.

Если вы не можете аутентифицировать сертификаты, вы можете отправить сообщение «Добавить этого пользователя» в зашифрованном виде (при условии, что эти два сайта могут совместно использовать секрет для шифрования). Это может быть уязвимо к атакам воспроизведения, но если вы сделаете временную метку частью сообщения «добавить этого пользователя», вы можете сильно ограничить временной интервал уязвимости для атак воспроизведения, вероятно, достаточно, чтобы сделать этот подход жизнеспособным.

Если вы не можете безопасно делиться секретами между двумя сайтами, не все потеряно: вы все равно можете использовать открытый ключ. Отправитель зашифровывает «добавить это сообщение пользователя» (включая, конечно же, временную метку) своим личным ключом, а затем открытым ключом получателя; получатель расшифровывает то, что он получает, с помощью своего собственного закрытого ключа, а затем с помощью открытого ключа отправителя. Немного грязно и, возможно, немного медленно, но при таких сложных ограничениях удивительно, что это все еще можно сделать вообще; -).

0 голосов
/ 29 марта 2010

Проблема в том, что один сайт не может устанавливать куки для другого. Даже если ваш код для входа на example.com должен был сделать запрос от сервера к серверу, чтобы сообщить exampletwo.com, что пользователь подтвержден, невозможно установить cookie для передачи этого сообщения, когда пользователь действительно посещает exampletwo.com.

Клиентские сертификаты обходят этот путь, но если эта система с двойной аутентификацией предназначена для широкой публики, то она не особенно хороша. Большинство людей увидят какой-то странный запрос («Хотите добавить этот сертификат?») И с криком разбегутся по холмам.

Обходной путь - сделать так, чтобы example.com выложил что-то, что заставит пользователя загрузить что-то с exampletwo.com. Изображение, кусок javascript и т. Д. ... и зашифрованный токен в запросе (<img src="http://exampletwo.com/login.php?remoteauth=ENCRYPTEDTOKEN">). Затем exampletwo может расшифровать токен и, если с его содержимым все в порядке, и отправить изображение (или все, что вы передаете) с соответствующим набором файлов cookie.

0 голосов
/ 29 марта 2010

Предполагая, что оба веб-сайта могут иметь доступ к одной общей базе данных, это можно сделать, когда веб-страницы обращаются к таблице и проверяют, вошел ли пользователь в систему или нет. Я не знаком с Djano или Tornado, но если вышеупомянутое решение сомнительно, вы можете использовать веб-метод (веб-службы) одного веб-сайта, а затем использовать (вызывать) веб-метод из другого. Файлы cookie не представляют никакой сложности, так как они зависят от сайта. И еще один подход - отслеживание пользователя по IP, но динамические IP могут представлять большую проблему и могут использоваться для нарушения безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...