Проблема здесь в том, как сообщить сайту kb.company.com
, что входящий пользователь подлинно аутентифицирован и вошел в систему support.company.com
.
У нас очень похожая настройка. У нас есть портал для реселлеров и частный вики-сайт базы знаний.
Чтобы перенести пользователей на вики-сайт, у нас есть специальная ссылка, которая запрашивает страницу на support.company.com
, которая генерирует большой объем данных и ключ сеанса (например, guid или два), которые сохраняются для передачи сеанса. "таблица базы данных, доступная для обоих сайтов.
Затем Response.Redirect()
пользователь попадает на вики-сайт с этим ключом, например:
http://kb.company.com/DoLogin.aspx?session=E97DDE8D-1C57-4450-ABE4-72E2054A1C82
В вики (мы немного изменили вики ScrewTurn) мы включили проверку подлинности с помощью форм и запретили доступ анонимным пользователям. DoLogin.aspx
извлекает значение session
из строки запроса и затем ищет запись, сохраненную в таблице «перенос сеанса». Если есть совпадение, мы аутентифицируем пользователя и удаляем запись переноса сеанса.
Запись переноса сеанса также имеет отметку даты и времени, и ей предоставляется срок жизни 90 секунд, после которого задача очистки удаляет запись.
Вместо того, чтобы передавать значение ключа сеанса через строку запроса, вы можете передать его через cookie, где домен cookie установлен в company.com
:
HttpCookie cookie = new HttpCookie("session", "<guid>");
cookie.Domain = "company.com";
Дальнейшие украшения заключаются в том, чтобы зашифровать значение cookie, выполнить некоторое хеширование и проверить его на другую сторону передачи. Однако контент в нашей вики не очень ценен (ни один из них не может быть изменен конечным пользователем), мы просто хотели не пускать случайных прохожих, и это прекрасно работает для нас.