WSFederationAuthenticationModule Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
— WSFederationAuthenticationModule это http-модуль, который используется для защиты приложения ASP.NET путем применения параметров федеративной проверки подлинности во входящих запросах. WSFederationAuthenticationModule представляет собой готовый главный модуль, который WIF предлагает для обработки доступа по удостоверениям на основе утверждений в приложениях ASP.NET.
Класс WSFederationAuthenticationModule вызывает несколько событий, что позволяет разработчикам ASP.NET изменять поведение по умолчанию и отслеживать сведения о порядке выполнения аутентификации и обработки утверждений. Функциональные возможности класса WSFederationAuthenticationModule разделены на методы, специфичные для задач.
public ref class WSFederationAuthenticationModule : System::IdentityModel::Services::HttpModuleBase
public class WSFederationAuthenticationModule : System.IdentityModel.Services.HttpModuleBase
type WSFederationAuthenticationModule = class
inherit HttpModuleBase
Public Class WSFederationAuthenticationModule
Inherits HttpModuleBase
- Наследование
Примеры
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
//SUBSCRIBE TO WSFAM EVENTS
FederatedAuthentication.WSFederationAuthenticationModule.AuthorizationFailed += new EventHandler<AuthorizationFailedEventArgs>(WSFederationAuthenticationModule_AuthorizationFailed);
FederatedAuthentication.WSFederationAuthenticationModule.RedirectingToIdentityProvider += new EventHandler<RedirectingToIdentityProviderEventArgs>(WSFederationAuthenticationModule_RedirectingToIdentityProvider);
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived += new EventHandler<SecurityTokenReceivedEventArgs>(WSFederationAuthenticationModule_SecurityTokenReceived);
FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenValidated += new EventHandler<SecurityTokenValidatedEventArgs>(WSFederationAuthenticationModule_SecurityTokenValidated);
FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated += new EventHandler<SessionSecurityTokenCreatedEventArgs>(WSFederationAuthenticationModule_SessionSecurityTokenCreated);
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += new EventHandler(WSFederationAuthenticationModule_SignedIn);
}
void WSFederationAuthenticationModule_SignedIn(object sender, EventArgs e)
{
//Anything that's needed right after succesful session and before hitting the application code goes here
System.Diagnostics.Trace.WriteLine("Handling SignIn event");
}
void WSFederationAuthenticationModule_SessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
//Manipulate session token here, for example, changing its expiration value
System.Diagnostics.Trace.WriteLine("Handling SessionSecurityTokenCreated event");
System.Diagnostics.Trace.WriteLine("Key valid from: " + e.SessionToken.KeyEffectiveTime);
System.Diagnostics.Trace.WriteLine("Key expires on: " + e.SessionToken.KeyExpirationTime);
}
void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e)
{
//All vlidation SecurityTokenHandler checks are successful
System.Diagnostics.Trace.WriteLine("Handling SecurityTokenValidated event");
}
void WSFederationAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)
{
//Augment token validation with your cusotm validation checks without invalidating the token.
System.Diagnostics.Trace.WriteLine("Handling SecurityTokenReceived event");
}
void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
{
//Use this event to report more details regarding the ahorization failure
System.Diagnostics.Trace.WriteLine("Handling AuthorizationFailed event");
}
void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e)
{
//Use this event to programmatically modify the sign-in message to the STS.
System.Diagnostics.Trace.WriteLine("Handling RedirectingToIdentityProvider event");
}
Комментарии
Класс WSFederationAuthenticationModule реализует модуль HTTP, известный как модуль проверки подлинности WS-Federation (WSFAM). WSFAM реализуется windows Identity Foundation (WIF). WSFAM добавляется в конвейер ASP.NET путем внесения записи в файл web.config. Он является производным от HttpModuleBase, который реализует IHttpModule. Он регистрируется в среде выполнения ASP.NET для EndRequest прослушивания событий и AuthenticateRequest . Прослушивание EndRequest события позволяет WSFAM перенаправлять клиентов в службу маркеров безопасности (STS), чтобы получить маркер безопасности при сбое авторизации для запрошенного ресурса. Прослушивание AuthenticateRequest события позволяет WSFAM отслеживать HTTP-запросы на получение ответа от службы маркеров безопасности, содержащей запрошенный маркер. Если такой маркер присутствует и действителен, он создает экземпляр ClaimsPrincipal для пользователя, прошедшего проверку подлинности, с помощью утверждений, присутствующих в маркере.
При использовании WSFAM управление сеансами обеспечивается модулем проверки подлинности сеанса (SAM), который является экземпляром SessionAuthenticationModule класса , или классом, производным от него. Sam также добавляется в конвейер ASP.NET в файле конфигурации. SAM отслеживает запросы для файлов cookie проверки подлинности (сеанса). Когда эти файлы cookie присутствуют и действительны, модуль извлекает ClaimsPrincipal для пользователя, прошедшего проверку подлинности, из SessionSecurityToken и задает HttpContext.User свойства и свойства субъекта Thread.CurrentPrincipal потока.
WSFAM предоставляет:
Возможность для приложения ASP.NET аутсорсинга проверки подлинности в службе маркеров безопасности (STS) с помощью протокола WS-Federation. Удостоверение может быть федеративно в одной или нескольких областях удостоверений и включать несколько stS.
Удостоверение на основе утверждений для приложений ASP.NET. Во время проверки подлинности WSFAM создает субъект из утверждений в маркере безопасности, отправленном службой маркеров безопасности, и задает этот субъект утверждений в качестве субъекта потока. Затем этот субъект можно использовать для принятия дальнейших авторизации, представления и логических решений о пользователе, который он представляет в коде.
WSFAM предоставляет несколько свойств, которые предоставляют параметры сообщения по умолчанию для использования в WS-Federation запросах на вход и выход. Эти свойства обычно инициализируются <из элемента wsFederation> в файле конфигурации. Наиболее важными из этих свойств являются:
Свойство Issuer , указывающее адрес службы маркеров безопасности (STS), в которую отправляется WS-Federation запросов на вход и выход.
Свойство Realm , указывающее параметр wtrealm для использования в WS-Federation запросах на вход. Параметр wtrealm определяет область безопасности приложения проверяющей стороны (RP) для службы маркеров безопасности.
Параметры сообщения входа также можно изменить для каждого запроса, предоставив делегат обработчика RedirectingToIdentityProvider событий для события.
Два свойства управляют поведением модуля. Оба этих свойства также обычно инициализируются <wsFederation>
из элемента в конфигурации.
Свойство PassiveRedirectEnabled указывает, должен ли модуль выполнять пассивные перенаправления в STS для проверки подлинности.
Свойство PersistentCookiesOnPassiveRedirects указывает, должны ли сеансы быть постоянными. Если для этого свойства задано значение true, sam используется для записи файла cookie сеанса на клиент. При последующих запросах от клиента SAM обеспечивает проверку подлинности с помощью маркера, сохраненного в файле cookie сеанса.
WSFAM вызывает несколько событий во время входа и выхода, которые позволяют разработчикам ASP.NET изменять поведение модуля по умолчанию и управлять сведениями о том, как выполняется проверка подлинности и обработка утверждений.
Перед отправкой запроса на вход в службу WS-Federation в службу маркеров обслуживания возникают следующие события:
AuthorizationFailed: возникает при включенном пассивном перенаправлении и сбое авторизации для запрошенного ресурса.
RedirectingToIdentityProvider: возникает непосредственно перед отправкой WSFAM запроса на вход WS-Federation в службу sts. Это событие можно использовать для изменения параметров в запросе на вход.
При получении ответа на вход (выданный маркер безопасности) от службы маркеров безопасности возникают следующие события:
SecurityTokenReceived: возникает сразу после того, как маркер безопасности, отправленный службой маркеров безопасности, будет считывается из ответа.
SecurityTokenValidated: возникает сразу после проверки маркера. Это событие можно использовать для фильтрации, преобразования или добавления утверждений к субъекту утверждений (ClaimsPrincipal), созданному на основе маркера безопасности.
SessionSecurityTokenCreated: создается непосредственно перед маркером сеанса (SessionSecurityToken), созданным из субъекта утверждений, который используется для задания субъекта потока и текущего пользователя и записывается в файл cookie сеанса. Позволяет изменить маркер сеанса, включить или отключить запись файла cookie сеанса.
SignedIn: возникает в конце проверки подлинности сразу после установки субъекта потока и текущего пользователя.
SignInError: возникает, если во время входа возникает исключение. Вы можете отменить запрос и предотвратить возврат исключения вызывающей объекту.
При выходе из сеанса или при обработке запроса на очистку WS-Federation выхода (wsignoutcleanup1.0) возникают следующие события:
SigningOut: вызывается непосредственно перед удалением сеанса, чтобы вы могли выполнить любую очистку, которая может зависеть от сеанса, или отменить выход.
SignedOut: возникает сразу после удаления сеанса.
SignOutError: возникает, если во время выхода возникает исключение. Вы можете отменить выход и запретить возвращение исключения вызывающей объекту.
Примечание
События выхода не вызываются при выходе в STS путем вызова FederatedSignOut метода .
Существует два способа входа в STS с помощью WSFAM. Первый — включение пассивных перенаправлений PassiveRedirectEnabled через свойство . В этом случае при сбое авторизации для запрошенного ресурса вместо возврата 401:Access Denied
ответа клиенту WSFAM создает WS-Federation сообщение запроса на вход из его свойств и перенаправляет клиент в службу безопасности для получения маркера безопасности. Второй способ — явным образом перенаправить клиент в stS, вызвав SignIn метод из веб-страницы или пользовательского элемента управления в приложении. Метод SignIn также использует свойства WSFAM для создания запроса на вход.
Для выхода из сеанса можно использовать любой из перегруженных SignOut методов. При этом файл cookie сеанса удаляется на клиенте. Он не отправляет сообщение о выходе WS-Federation ("wsignout1.0") в STS. Чтобы выйти из службы маркеров подлинности FederatedSignOut , необходимо использовать метод .
WSFAM обрабатывает WS-Federation запросы на очистку выхода ("wsignoutcleanup1.0"), удаляя сеанс с клиентом. Если параметр wreply в сообщении о очистке выхода не задан, WSFAM возвращает изображение зеленой проверка метки в stS, отправившем сообщение. Эта функция может использоваться службой маркеров в качестве подтверждения того, что RP завершил выход.
WSFAM предоставляет свои функциональные возможности, например конвейер обработки запросов, с помощью нескольких методов для конкретных задач. Эти методы можно переопределить в производных классах, чтобы изменить поведение WSFAM.
Для использования модуль необходимо добавить в конвейер, как показано в следующем XML-коде:
<configuration>
<system.webServer>
<modules>
<add name="WsFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</modules>
</system.webServer>
</configuration>
После настройки WSFederationAuthenticationModule вызывает события на различных этапах обработки HTTP-запроса. ASP.NET разработчики могут обрабатывать эти события в файле global.asax.
Конструкторы
WSFederationAuthenticationModule() |
Вызывается конструкторами в производных классах для инициализации класса WSFederationAuthenticationModule. |
Свойства
AuthenticationType |
Возвращает или задает значение параметра wauth, используемого в запросах входа WS-Federation ("wsignin1.0"). |
FederationConfiguration |
Получает или задает объект FederationConfiguration, действующий для текущего модуля. (Унаследовано от HttpModuleBase) |
Freshness |
Возвращает или задает значение параметра wfresh, используемого в запросах входа WS-Federation ("wsignin1.0"). |
HomeRealm |
Возвращает или задает значение параметра whr, используемого в запросах входа WS-Federation ("wsignin1.0"). |
Issuer |
Получает или задает универсальный код ресурса (URI), который указывает предполагаемого издателя токена безопасности. |
PassiveRedirectEnabled |
Получает или задает значение, указывающее, разрешено ли модулю инициировать перенаправления протокола WS-Federation. |
PersistentCookiesOnPassiveRedirects |
Получает или задает значение, указывающее, выдается ли после успешной аутентификации постоянный файл cookie сеанса. |
Policy |
Возвращает или задает значение параметра wp, используемого в запросах входа WS-Federation ("wsignin1.0"). |
Realm |
Возвращает или задает значение параметра wtrealm, используемого для запросов входа WS-Federation ("wsignin1.0"). |
Reply |
Возвращает или задает значение параметра wreply, используемого в запросах входа WS-Federation ("wsignin1.0"). |
Request |
Возвращает или задает значение параметра wreq, используемого в запросах входа WS-Federation ("wsignin1.0"). |
RequestPtr |
Возвращает или задает значение параметра wreqptr, используемого в запросах входа WS-Federation ("wsignin1.0"). |
RequireHttps |
Получает или задает значение, которое определяет, должно ли взаимодействие со службой токенов безопасности (STS) осуществляться по протоколу HTTPS. |
Resource |
Получает или задает значение параметра wres, используемого в запросах входа WS-Federation ("wsignin1.0"). |
SignInContext |
Получает или задает значение контекста приложения для включения в параметр wctx в запросы входа в WS-Federation. |
SignInQueryString |
Возвращает или задает строку запроса, которая содержит любые дополнительные параметры, которые будут отправляться в запросах входа WS-Federation ("wsignin1.0"). |
SignOutQueryString |
Получает или задает строку запроса, которая содержит любые дополнительные параметры, которые будут отправляться в запросах выхода WS-Federation ("wsignout1.0"). |
SignOutReply |
Возвращает или задает значение параметра wreply, используемого в запросах выхода WS-Federation ("wsignout1.0"). |
XmlDictionaryReaderQuotas |
Получает или задает объект XmlDictionaryReaderQuotas, используемый при десериализации ответных сообщений входа WS-Federation для получения токена, выданного службой токенов безопасности (STS). |
Методы
CanReadSignInResponse(HttpRequestBase) |
Возвращает значение, указывающее, является ли заданный HTTP-запрос ответным сообщением входа WS-Federation. Если сообщение является сообщением очистки выхода WS-Federation ("wsignoutcleanup1.0"), этот метод обрабатывает запрос. |
CanReadSignInResponse(HttpRequestBase, Boolean) |
Возвращает значение, указывающее, является ли заданный HTTP-запрос ответным сообщением входа WS-Federation. Если сообщение является сообщением очистки выхода WS-Federation ("wsignoutcleanup1.0"), этот метод обрабатывает запрос. |
CreateSignInRequest(String, String, Boolean) |
Создает сообщение запроса входа WS-Federation, используя параметры WS-Federation, настроенные для модуля. |
Dispose() |
Освобождает ресурсы (за исключением памяти), используемые текущим экземпляром класса HttpModuleBase. (Унаследовано от HttpModuleBase) |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
FederatedSignOut(Uri, Uri) |
Выполняет выход в указанной службе токенов безопасности (STS) с помощью протокола WS-Federation. |
GetFederationPassiveSignOutUrl(String, String, String) |
Возвращает URL-адрес, представляющие запрос на выход из WS-Federation обращенный к указанному издателю и который содержит указанный параметр wreply и заданные дополнительные параметры. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetReferencedResult(String) |
Получает результат выдачи (обычно выданный токен) из указанного URL-адреса. Разрешает URL-адрес, указанный в параметре wresultptr в ответном сообщении входа. |
GetReturnUrlFromResponse(HttpRequestBase) |
Извлекает URL-адрес изначально запрошенной страницы из ответа входа. |
GetSecurityToken(HttpRequestBase) |
Считывает токен безопасности из указанного HTTP-запроса. |
GetSecurityToken(SignInResponseMessage) |
Считывает токен безопасности из указанного ответного сообщения входа WS Federation. |
GetSessionTokenContext() |
Получает строку, которая должна быть сохранена с файлом cookie сеанса в свойстве Context. |
GetSignInResponseMessage(HttpRequestBase) |
Считывает объект SignInResponseMessage из формы POST, представленной указанным HTTP-запросом. |
GetSignOutRedirectUrl(SignOutCleanupRequestMessage) |
Определяет URL-адрес, на который идет перенаправление при обработке запроса очистки выхода WS-Federation (wsignoutcleanup1.0), который содержит параметр wreply. |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
GetXmlTokenFromMessage(SignInResponseMessage) |
Извлекает выданный токен из указанного ответного сообщения входа WS Federation. |
GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer) |
Извлекает выданный токен из указанного ответного сообщения входа WS-Federation с использованием указанного сериализатора WS-Federation. |
Init(HttpApplication) |
Инициализирует HTTP-модуль. (Унаследовано от HttpModuleBase) |
InitializeModule(HttpApplication) |
Инициализирует модуль и подготавливает его для обработки событий из объекта приложения ASP.NET модуля. |
InitializePropertiesFromConfiguration() |
Инициализирует свойства модуля на основе конфигурации, заданной свойством FederationConfiguration модуля. |
IsSignInResponse(HttpRequestBase) |
Получает значение, указывающее, является ли заданный запрос ответным сообщением входа WS-Federation. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
OnAuthenticateRequest(Object, EventArgs) |
AuthenticateRequest Обрабатывает событие из конвейера ASP.NET. |
OnAuthorizationFailed(AuthorizationFailedEventArgs) |
Вызывает событие AuthorizationFailed. |
OnEndRequest(Object, EventArgs) |
EndRequest Обрабатывает событие из конвейера ASP.NET. |
OnPostAuthenticateRequest(Object, EventArgs) |
PostAuthenticateRequest Обрабатывает событие из конвейера ASP.NET. |
OnRedirectingToIdentityProvider(RedirectingToIdentityProviderEventArgs) |
Вызывает событие RedirectingToIdentityProvider. |
OnSessionSecurityTokenCreated(SessionSecurityTokenCreatedEventArgs) |
Вызывает событие SessionSecurityTokenCreated. |
OnSignedIn(EventArgs) |
Вызывает событие SignedIn. |
OnSignedOut(EventArgs) |
Вызывает событие SignedOut. |
OnSignInError(ErrorEventArgs) |
Вызывает событие SignInError. |
OnSigningOut(SigningOutEventArgs) |
Вызывает событие SigningOut. |
OnSignOutError(ErrorEventArgs) |
Вызывает событие SignOutError. |
RedirectToIdentityProvider(String, String, Boolean) |
Перенаправляет пользователя на службу токенов безопасности (STS), указанную свойством Issuer, чтобы получить токен безопасности с помощью протокола WS-Federation. |
SetPrincipalAndWriteSessionToken(SessionSecurityToken, Boolean) |
Задает субъект потока и (опционально) записывает файл cookie сеанса. |
SignIn(String) |
Выполняет вход в службу токенов безопасности (STS) через протокол WS-Federation. |
SignOut() |
Выполняет выход из текущего сеанса и запрашивает перенаправление обратно на URL-адрес, указанный в текущем HTTP-запросе. |
SignOut(Boolean) |
Выполняет выход из текущего сеанса и вызывает соответствующие события. |
SignOut(String) |
Выполняет выход из текущего сеанса и запрашивает перенаправление обратно на указанный URL-адрес. |
SignOut(String, Boolean) |
Выполняет выход из текущего сеанса и запрашивает перенаправление обратно на указанный URL-адрес. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
VerifyProperties() |
Проверяет, являются ли свойства Issuer и Realm непустыми, и совместимы ли с HTTPS универсальные коды ресурса (URI), заданные для свойств RequireHttps и Issuer, если свойство Realm имеет значение |
События
AuthorizationFailed |
Возникает, когда модуль определяет, должен ли он перенаправить пользователя на настроенного издателя для аутентификации. |
RedirectingToIdentityProvider |
Возникает, когда модуль собирается перенаправить пользователя на поставщика удостоверений. |
SecurityTokenReceived |
Возникает при получении токена безопасности от службы токенов безопасности (STS). |
SecurityTokenValidated |
Возникает после того, как полученный от службы токенов безопасности (STS) токен безопасности был проверен, однако до того, как будет создан токен безопасности сеанса. |
SessionSecurityTokenCreated |
Возникает при создании токена безопасности сеанса из токена безопасности, полученного от службы токенов безопасности (STS). |
SignedIn |
Возникает после того, как пользователь вошел в систему. |
SignedOut |
Возникает сразу после удаления сеанса во время выхода из системы. |
SignInError |
Создается при возникновении ошибки во время входа. |
SigningOut |
Возникает перед удалением сеанса во время выхода из системы. |
SignOutError |
Создается при возникновении ошибки во время выхода. |