Единая точка входа (SSO) концептуально довольно проста.
domain1.com
. domain1.com
видит, что нет никаких сеансовых куки. domain1.com
перенаправления к sso.com
sso.com
страница входа в систему подарков, и берет учетные данные sso.com
сеансовые куки наборов для пользователя sso.com
тогда перенаправления назад к domain1
к специальному URL (как domain1.com/ssologin
) ssologin
, URL содержит параметр, который в основном "подписывается" sso.com
. Это могло быть столь же просто как base64 шифрования зарегистрированного использования общего секретного ключа. domain1.com
берет зашифрованный маркер, дешифрует его, использует новый идентификатор для входа в систему для входа в систему пользователя. domain1
наборы сеансовые куки для пользователя. Теперь, следующий случай.
domain2.com
, который следует domain1
и перенаправляет к [1 115] sso.com
уже, имеют cookie для пользователя, не представляет страницу входа в систему sso.com
, перенаправления назад к [1 118] с зашифрованными данными domain2.com
входят в систему пользователь. Это - основные принципы того, как это работает. Можно сделать его более устойчивым, более многофункциональным (например, это SSOn, но не SSOff, пользователь может "выйти из системы" [1 120], но все еще зарегистрирован к [1 121]). Можно использовать открытые ключи для подписания учетных данных, у Вас могут быть запросы для передачи большей информации (как права авторизации, и т.д.) с сервера SSO. У Вас может быть более близкая интеграция, такая как домены, обычно проверяющие, что пользователь все еще имеет права с сервера SSO.
, Но квитирование cookie через браузер с помощью перенаправлений является ключевой основой, на которой базируются все эти решения SSO.
Если бы кто-то смог играть человека в середине и захвате, которые хешируют, они были бы в состоянии украсть перекрестную доменную передачу? Очевидно, это должно быть сгенерировано и отправлено клиенту до них бывший должный использовать его. Поэтому скажите, например:
я играю человека в середине, шпионя за Jack. Jack получает доступ domain1.com
, который заставляет хеш быть подготовленным и отправленным ему так, чтобы, когда он получает доступ domain2.com
, он мог отправить тот хеш как аутентификацию. Поскольку он получает доступ domain1.com
, его запрос проникает через меня, Вы возвращаете страницу, я захватываю хеш и позволяю ему продолжить. Я получаю доступ domain2.com
использование хеша, Вы теперь позволили мне в domain2.com
и удалили хеш. Он ничего не узнал, пока он не пытается войти в систему к domain2.com
и сказан, что его учетные данные больше не действительны.
, Как Вы преодолеваете это?
Это - хорошее решение. Вот два вопроса для рассмотрения:
Вы используете термин "хеш", но не ясно, какие данные Вы хешируете. Вместо этого используйте "данный случай": большое (128-разрядное) количество, сгенерированное криптографическим качеством RNG.
кроме того, Вы не определили это, но связь между пользователем и обоими доменами, и между самими доменами, должны быть безопасными. Используйте SSL, чтобы аутентифицировать серверы и сохранить данный случай конфиденциальным.