2

Как реализовать единый вход по доменам? У меня есть два или более домена, и я хочу, чтобы все они прошли аутентификацию через один сервер, используя SqlMembershipProvider (база данных членства в ASP.NET 2.0) У меня есть домен foo.com, в котором размещена база данных членства asp.net и еще один домен bar.com, который хочет пройти аутентификацию через foo.com. Я нашел много статей в Интернете для разных приложений, но в том же домене, но в разных доменах я не нашел полную статью, описывающую цикл, я видел некоторые из них, используя класс FormsAuthenticationTicket или класс FormsAuthentication. Я знаю, что machineKey в web.config должен быть таким же. Я думал, что это легко, разрешив foo.com, как только он будет аутентифицирован, просто дублирует cookie аутентификации и изменит домен кука-файла с сайта foo.com на bar.com, но я понял, что я не могу контролировать файлы cookie других доменов! Так есть ли способ заставить его работать?SSO в разных доменах

Спасибо и привет, Ахмеда

+0

Можете ли вы привести пример использования кода статуса HTTP из HttpModule? и все же я хочу аутентифицировать пользователя, используя обычное asp.net-membership (aspnetdb)? И еще один вопрос, какая часть в asp.net обрабатывает перенаправление на страницу входа и добавляет ссылку на строку запроса ReturnUrl как относительный путь, а не полный путь, я хочу обработать ее, чтобы начать перенаправление на полный путь. Что же касается веб-служб, возможно ли, что я могу пройти аутентификацию через веб-сервер? и как? –

ответ

1

Это не простой вопрос, но я могу дать вам несколько советов.

Чтобы работать с настройками web.config ASP.NET, которые разрешают анонимный доступ или требуют входа пользователя в систему, вам необходимо создать модуль, который перехватывает HttpApplication.EndRequest и проверяет на ошибку HTTP 401 (это означает аутентификацию).
Сбросить код ошибки и перенаправить на ваш сайт единого входа. Здесь вы можете войти в систему, как обычно.

Теперь начинается самая сложная часть: вам необходимо безопасно передавать учетные данные пользователя по проводу на другой сервер. Вы можете сделать это с помощью симметричного шифрования и общего секрета, или обмен секретным по асимметричному шифрованию.

HttpModule с другой стороны теперь берет перенаправление с сайта входа в систему, проверяет, что билет для входа действителен и заменяет HttpContext.User (обязательно, чтобы инкапсулировать существующего пользователя, если он есть, так что вы может маршрутизировать вызов IsInRole на этот IPrincipal).