Есть ли любые достойные примеры следующего доступного:
При просмотре 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, где пользователи входят в систему фактический подход в пассивном сценарии просителя?
Пример 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.
Обратите внимание, что даже если они находятся в открытом тексте, подделка невозможна, поскольку токен имеет цифровую подпись.
Вы задали интересный вопрос. Я знаю, что по какой-то причине 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 значение страница авторизации.
То, что вы хотите сделать, это активный вход. 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);
}
После того, как вы это сделаете, ваш сайт должен вести себя так же, как если бы пассивная подпись произошло.
Вы можете использовать элемент управления FederatedPassiveSignIn.