ASP.NET смешанные формы / проверка подлинности Windows - PullRequest
10 голосов
/ 20 июля 2011

В настоящее время я разрабатываю веб-приложение MVC3, которое требует, чтобы пользователи экстрасети входили в систему и проходили проверку подлинности с использованием проверки подлинности с помощью форм.Пользователи интрасети должны входить в систему автоматически с использованием аутентификации Windows.
Я нашел эту статью, http://aspalliance.com/553_Mixed_Mode_Authentication.all, но она датирована ноябрем 2004 года и ему нравится находить что-то написанное более 7 лет назад.

Мой план состоит в том, чтобы в IIS было два приложения с виртуальными каталогами, указывающими на один и тот же физический каталог, но одно разрешит анонимный доступ, а другое - нет.

Когда пользователь проходит проверку подлинности на стороне Windows / IntranetЯ надеюсь просто симулировать вход пользователя в систему с помощью аутентификации форм.Есть ли подводные камни в этом подходе?Есть идеи получше?

РЕДАКТИРОВАТЬ: 22 июля 2011 г.

Я использую IIS7, который не позволит мне делать многие вещи, предложенные в более старых статьях.Из-за более тесной интеграции аутентификации между IIS7 и веб-сайтами ASP.NET некоторые вещи запрещены.Например, я не могу установить Windows Auth для одного файла, в то время как остальная часть приложения использует Forms Auth.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Интересно, если лучший подход здесь не будет иметь два приложения, где первое приложение использует проверку подлинности 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 выше, но я постоянно обращаюсь к ней, когда сталкиваюсь с подобными проблемами с аутентификацией и авторизацией.

0 голосов
/ 25 июля 2011

Это вполне возможно, если вы создадите два разных приложения в IIS, так что ваша работа выполнена!=) * * Тысяча одна

...