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


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-запросы для ответа от stS, содержащего запрошенный маркер. Если такой маркер присутствует и действителен, он создает экземпляр 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) к stS.

Параметры сообщения входа также можно изменить на основе каждого запроса, предоставив делегат обработчика событий для события RedirectingToIdentityProvider.

Два свойства управляют поведением модуля. Оба этих свойства также обычно инициализированы из элемента <wsFederation> в конфигурации.

  • Свойство PassiveRedirectEnabled указывает, должен ли модуль выполнять пассивные перенаправления на stS для проверки подлинности.

  • Свойство PersistentCookiesOnPassiveRedirects указывает, должны ли сеансы быть постоянными. Если это свойство задано true, SAM используется для записи файла cookie сеанса клиенту. При последующих запросах от клиента SAM обеспечивает проверку подлинности с помощью маркера, сохраненного в файле cookie сеанса.

WSFAM вызывает несколько событий во время входа и выхода, которые позволяют разработчикам ASP.NET изменять поведение модуля по умолчанию и управлять сведениями о том, как выполняется проверка подлинности и утверждения.

Перед отправкой запроса на вход WS-Federation в службу STS возникают следующие события:

  • 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. Чтобы выйти из службы stS, необходимо использовать метод FederatedSignOut.

WSFAM обрабатывает запросы очистки WS-Federation выхода ("wsignoutcleanup1.0"), удалив сеанс с клиентом. Если параметр wreply в сообщении очистки выхода не задан, WSFAM возвращает изображение зеленой флажки для stS, отправляющего сообщение. Эту функцию можно использовать службой 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, Boolean)

Возвращает значение, указывающее, является ли указанный HTTP-запрос WS-Federation сообщением ответа на вход. Если сообщение является сообщением WS-Federation сообщение о очистке выхода ("wsignoutcleanup1.0"), этот метод обрабатывает запрос.

CanReadSignInResponse(HttpRequestBase)

Возвращает значение, указывающее, является ли указанный 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.

GetSessionTokenContext()

Возвращает строку, которая должна быть сохранена с файлом cookie сеанса в свойстве Context.

GetSignInResponseMessage(HttpRequestBase)

Считывает объект SignInResponseMessage из формы POST, представленной указанным HTTP-запросом.

GetSignOutRedirectUrl(SignOutCleanupRequestMessage)

Определяет URL-адрес для перенаправления при обработке запроса очистки WS-Federation выхода (wsignoutcleanup1.0), содержащего параметр wreply.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
GetXmlTokenFromMessage(SignInResponseMessage, WSFederationSerializer)

Извлекает выданный маркер из указанного сообщения ответа WS-Federation входа с помощью указанного сериализатора WS-Federation.

GetXmlTokenFromMessage(SignInResponseMessage)

Извлекает выданный маркер из указанного 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, Boolean)

Выходит из текущего сеанса и запрашивает перенаправление обратно на указанный URL-адрес.

SignOut(String)

Выходит из текущего сеанса и запрашивает перенаправление обратно на указанный URL-адрес.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
VerifyProperties()

Проверяет, не являются ли свойства Issuer и Realm пустыми, а если свойство RequireHttpstrue, то URI, указанные для Issuer и Realm, соответствуют протоколу HTTPS.

События

AuthorizationFailed

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

RedirectingToIdentityProvider

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

SecurityTokenReceived

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

SecurityTokenValidated

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

SessionSecurityTokenCreated

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

SignedIn

Происходит после входа пользователя.

SignedOut

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

SignInError

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

SigningOut

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

SignOutError

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

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