Ответ 1
Удивительно, что лучший подход здесь не будет состоять из двух приложений, в которых первое приложение использует проверку подлинности Windows и состоит исключительно из привязки к событию PostAuthenticate в конвейере HTTP. Если пользователь аутентифицирован, вы даете им билет формы и перенаправляете на целевое приложение App2, которое использует проверку подлинности на основе форм. Вы должны быть осторожны, чтобы файлы cookie не были специфичными для пути, а также что эти два приложения находятся на одном сервере (или что ключи шифрования синхронизированы в web.config). Если пользователь не аутентифицирован, вы просто перенаправляете его без авторизационного билета, и они заходят в систему при поступлении в App2.
App1: www.myUrl.com\MyApp
Это "общедоступный" URL-адрес приложения и обнаруживает пользователей сети, подключаясь к событию PostAuthenticate (см. Профессиональная защита ASP.NET 2.0, членство и Управление ролями):
//Hook PostAuthenticateRequest inside of global.asax
void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
IPrincipal p = HttpContext.Current.User;
if (p.Identity.IsAuthenticated)
{
// to do: give them a non-path specific ticket and redirect to App2
}
}
App2: www.myUrl.com\MyApp2
Это фактическое приложение. Когда пользователи сети приходят из App1, у них уже будет билет на формы. Когда не-сетевые пользователи прибудут, они будут перенаправлены на login.aspx.
Примечания: Одним из недостатков этого было бы, если бы пользователи сети заходили в App2. Я не совсем уверен, как мне обойти это. Если у них есть неиспользуемый файл cookie, это не имеет большого значения. Один из вариантов заключается в том, чтобы поместить ссылку на страницу входа в систему, которая говорит что-то вроде "Я уже являюсь сетевым пользователем - зарегистрируйте меня автоматически", который будет ссылаться на App1, где они войдут в систему?
У меня есть код, который поможет в выдаче билета форм. Я буду обновлять ответ, поскольку у меня есть время.
Обратите внимание, что вам нужно будет сделать некоторые причудливые функции управления ролью в App2 для обработки разрозненных поставщиков роли. Эта ссылка Amazon выше, но я постоянно обращаюсь к ней, когда сталкиваюсь с такими проблемами аутентификации и авторизации.