Интересно, если лучший подход здесь не будет иметь два приложения, где первое приложение использует проверку подлинности Windows и состоит исключительно из перехвата события PostAuthenticate в конвейере HTTP.Если пользователь проходит проверку подлинности, вы даете ему билет формы и перенаправляете его в целевое приложение App2, которое использует проверку подлинности форм.Вы должны быть осторожны, чтобы файлы cookie не были привязаны к конкретному пути, а также чтобы оба приложения находились на одном сервере (или чтобы ключи шифрования синхронизировались в web.config).Если пользователь не аутентифицирован, вы просто перенаправляете его без авторизационного билета, и он входит в систему, когда приходит в App2.
App1: www.myUrl.com \ MyApp
Это «общедоступный» URL-адрес для приложения, который обнаруживает пользователей сети, подключаясь к событию PostAuthenticate (см. Безопасность, членство и управление ролями в ASP.NET 2.0 Professional ):
//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
}
}
Приложение 2: www.myUrl.com \ MyApp2
Это фактическое приложение.Когда пользователи сети прибывают из App1, у них уже будет билет формы.Когда приходят пользователи, не входящие в сеть, они будут перенаправлены на login.aspx.
Примечания: Одним из недостатков этого подхода будет то, что пользователи сети добавят в закладки App2.Я не совсем уверен, как бы я обойти это.Если у них есть не истекающий файл cookie, это не будет иметь большого значения.Одним из вариантов может быть размещение ссылки на странице входа в систему, которая говорит что-то вроде: «Я уже являюсь пользователем сети - войдите в систему автоматически», что будет означать ссылку на App1, где они будут входить в систему?
У меня есть некоторый код, чтобы помочь с выдачей билетов.Я обновлю ответ, как только у меня будет время.
Обратите внимание, что вам придется проделать определенную работу по управлению ролями в App2, чтобы справиться с различными поставщиками ролей.Эта ссылка на Amazon выше, но я постоянно обращаюсь к ней, когда сталкиваюсь с подобными проблемами с аутентификацией и авторизацией.