Поделиться через


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
Наследование
WSFederationAuthenticationModule

Примеры


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 имеет значение true.

События

AuthorizationFailed

Возникает, когда модуль определяет, должен ли он перенаправить пользователя на настроенного издателя для аутентификации.

RedirectingToIdentityProvider

Возникает, когда модуль собирается перенаправить пользователя на поставщика удостоверений.

SecurityTokenReceived

Возникает при получении токена безопасности от службы токенов безопасности (STS).

SecurityTokenValidated

Возникает после того, как полученный от службы токенов безопасности (STS) токен безопасности был проверен, однако до того, как будет создан токен безопасности сеанса.

SessionSecurityTokenCreated

Возникает при создании токена безопасности сеанса из токена безопасности, полученного от службы токенов безопасности (STS).

SignedIn

Возникает после того, как пользователь вошел в систему.

SignedOut

Возникает сразу после удаления сеанса во время выхода из системы.

SignInError

Создается при возникновении ошибки во время входа.

SigningOut

Возникает перед удалением сеанса во время выхода из системы.

SignOutError

Создается при возникновении ошибки во время выхода.

Применяется к