ASP.NET MVC 2 и аутентификация с помощью WIF (Windows Identity Foundation)

Есть ли любые достойные примеры следующего доступного:

При просмотре SDK WIF существуют примеры использования WIF в сочетании с ASP.NET с помощью WSFederationAuthenticationModule (FAM) перенаправить на сайт ASP.NET тонкую кожу сверх Сервиса маркера безопасности (STS) что пользовательское использование для аутентификации (через предоставление имени пользователя и пароля).

Если бы я понимаю WIF и основанный на требованиях доступ правильно, я хотел бы, чтобы мое приложение обеспечило свой собственный экран входа в систему, где пользователи вводят свое имя пользователя и пароль и позволяют этому делегату в STS для аутентификации, отправляя данные для входа в систему в конечную точку с помощью стандарта обеспечения защиты (WS -*), и ожидая, что маркер SAML будет возвращен. Идеально, SessionAuthenticationModule работал бы согласно использованию в качестве примера FAM в сочетании с SessionAuthenticationModule т.е. будьте ответственны за восстановление IClaimsPrincipal от сессии безопасность разделила cookie на блоки и перенаправляющий к моей странице входа в систему приложения, когда сессия безопасности истекает.

То, что я описываю возможное использование FAM и SessionAuthenticationModule с соответствующими web.config настройками, или делают я должен думать о записи a HttpModule самостоятельно обработать это? С другой стороны, перенаправлением является к тонкому веб-сайту STS, где пользователи входят в систему фактический подход в пассивном сценарии просителя?

23
задан Russ Cam 12 April 2010 в 11:05
поделиться

4 ответа

Пример WIF + MVC доступен в этой главе "Claims Identity Guide":

http://msdn.microsoft.com/en-us/library/ff359105.aspx

Я рекомендую прочитать первые пару глав, чтобы понять все основополагающие принципы. В этой статье блога рассматриваются особенности MVC + WIF:

http://blogs.msdn.com/b/eugeniop/archive/2010/04/03/wif-and-mvc-how-it-works.aspx

Управление процессом входа в систему - это совершенно нормально. Вы должны просто развернуть свою собственную STS (в вашем домене, с вашим внешним видом и ощущениями, и т.д.). Ваши приложения будут просто полагаться на него для AuthN (вот почему приложение обычно называют "полагающейся стороной").

Преимущество этой архитектуры в том, что AuthN делегируется одному компоненту (STS), а не распределяется между многими приложениями. Но другое (огромное) преимущество заключается в том, что вы можете легко реализовать более сложные сценарии. Например, теперь вы можете объединяться с поставщиками идентификационных данных других организаций.

Надеюсь, это поможет Eugenio

@RisingStar:

Токен (содержащий утверждения) может быть опционально зашифрован (иначе они будут в открытом тексте). Вот почему SSL всегда рекомендуется для взаимодействия между браузером и STS.

Обратите внимание, что даже если они находятся в открытом тексте, подделка невозможна, поскольку токен имеет цифровую подпись.

19
ответ дан 29 November 2019 в 02:16
поделиться

Вы задали интересный вопрос. Я знаю, что по какой-то причине Microsoft выпустила этот фреймворк «Windows Identity Foundation» без особой документации. Я знаю это, потому что мне было поручено выяснить, как использовать его в новом проекте и интегрировать с существующей инфраструктурой. Я много месяцев искал в Интернете в поисках хорошей информации.

Я подошел к решению описанной вами проблемы с несколько иной точки зрения.

Я взял существующее приложение для входа в систему и интегрировал в него систему WIF от Microsoft. Под этим я подразумеваю, что у меня есть приложение, в котором пользователь входит в систему. Приложение для входа в систему отправляет учетные данные, предоставленные пользователем, на другой сервер, который возвращает идентификатор пользователя (или указывает на ошибку входа в систему).

Глядя на некоторые примеры Microsoft, я вижу, что они делают следующее: Создают SignInRequestMessage из строки запроса (сгенерированной приложением проверяющей стороны), создают службу маркеров безопасности из настраиваемый класс и, наконец, вызовите FederatedSecurityTokenServiceOperations.ProcessSignInresponse с текущим httpcontext.response. К сожалению, я не могу здесь хорошо это объяснить; вам действительно нужно взглянуть на образцы кода.

Часть моего кода очень похожа на пример кода. Вам будет интересно реализовать большую часть своей собственной логики в GetOutputClaimsIdentity . Это функция, которая создает удостоверение утверждений, которое описывает вошедшего в систему пользователя.

Вот что, я думаю, вам действительно интересно узнать.Это то, что Microsoft не сообщает вам в своей документации, AFAIK.

Как только пользователь входит в систему, он перенаправляется обратно в приложение проверяющей стороны. Независимо от того, как работает приложение для входа в систему, классы WIF отправят в браузер пользователя ответ, содержащий «скрытый» HTML-ввод, содержащий сертификат подписи токена и утверждения пользователя. (Претензии будут в открытом виде). В конце этого ответа находится перенаправление на ваш проверяющий веб-сайт. Я знаю об этом действии только потому, что зафиксировал его с помощью «Fiddler»

. Вернувшись на веб-сайт проверяющей стороны, классы WIF обработают ответ (до того, как будет запущен любой из ваших кодов). Сертификат будет проверен. По умолчанию, если вы настроили веб-сайт проверяющей стороны с помощью FedUtil.exe (нажав «Добавить ссылку STS в приложение проверяющей стороны из Visual Studio)», класс Microsoft проверит отпечаток сертификата.

Наконец, WIF framework устанавливает файлы cookie в браузере пользователя (по моему опыту, имена файлов cookie начинаются с "FedAuth"), которые содержат утверждения пользователей. Файлы cookie не читаются человеком.

Как только это произойдет, вы можете дополнительно выполнять операции с пользователем претензии на веб-сайте проверяющей стороны с использованием ClaimsAuthenticationClass . Здесь снова выполняется ваш код .

Я знаю, что это отличается от того, что вы описываете, но у меня эта настройка работает . Надеюсь, это поможет!

пс. Пожалуйста, ознакомьтесь с другими вопросами, которые я задавал о Windows Identity Foundation.

ОБНОВЛЕНИЕ: чтобы ответить на вопрос в комментарии ниже:

Одна вещь, которую я упустил, - это то, что перенаправление в приложение для входа в STS происходит посредством перенаправления со строкой запроса, содержащей URL-адрес приложения, которое пользователь входит в систему. Это перенаправление происходит автоматически, когда пользователь впервые пытается получить доступ к странице, требующей аутентификации. В качестве альтернативы я считаю, что вы можете выполнить перенаправление вручную с помощью модуля WSFederationAuthentication .

Я никогда не пытался это сделать, но если вы хотите использовать страницу входа в систему в самом приложении, я считаю, что структура должна позволять вам использовать следующее:

1) Инкапсулируйте свой код STS в библиотеку. 2) Ссылка на библиотеку из вашего приложения. 3) Создайте страницу входа в свое приложение. Убедитесь, что такая страница не требует аутентификации. 4) Установите для свойства эмитента элемента wsFederation в разделе Microsoft.IdentityModel вашего web.config значение страница авторизации.

13
ответ дан 29 November 2019 в 02:16
поделиться

То, что вы хотите сделать, это активный вход. WIF включает WSTrustChannel (Factory) , который позволяет вам напрямую связываться с STS и получать токен безопасности. Если вы хотите, чтобы ваша форма входа работала таким образом, вы можете следовать примеру «WSTrustChannel» из WIF 4.0 SDK. После получения токена следующий код возьмет этот токен и вызовет обработчик WIF для создания токена сеанса и установки соответствующего файла cookie:

public void EstablishAuthSession(GenericXmlSecurityToken genericToken)
{
    var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;            
    var token = handlers.ReadToken(new XmlTextReader(
                                        new StringReader(genericToken.TokenXml.OuterXml)));

    var identity = handlers.ValidateToken(token).First();
    // create session token
    var sessionToken = new SessionSecurityToken(
        ClaimsPrincipal.CreateFromIdentity(identity));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
}

После того, как вы это сделаете, ваш сайт должен вести себя так же, как если бы пассивная подпись произошло.

4
ответ дан 29 November 2019 в 02:16
поделиться

Вы можете использовать элемент управления FederatedPassiveSignIn.

1
ответ дан 29 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: