SessionSecurityTokenHandler Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
, SecurityTokenHandler обрабатывающий маркеры безопасности типа SessionSecurityToken.
public ref class SessionSecurityTokenHandler : System::IdentityModel::Tokens::SecurityTokenHandler
public class SessionSecurityTokenHandler : System.IdentityModel.Tokens.SecurityTokenHandler
type SessionSecurityTokenHandler = class
inherit SecurityTokenHandler
Public Class SessionSecurityTokenHandler
Inherits SecurityTokenHandler
- Наследование
- Производный
Примеры
В следующем XML-коде показано, как заменить обработчик маркера безопасности сеанса по умолчанию в коллекции обработчика маркеров экземпляром MachineKeySessionSecurityTokenHandler класса в конфигурации.
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
Комментарии
Класс SessionSecurityTokenHandler сериализует, десериализирует и проверяет маркеры сеанса. Маркеры сеанса — это маркеры типа SessionSecurityToken. Класс SessionSecurityTokenHandler сериализует маркеры в формат cookie и из нее. По умолчанию класс сериализует маркеры в элементы WS-Secure Conversation Feb2005 или WS-Secure Conversation 1.3 <wsc:SecurityContextToken> . Маркеры сеансов используются WSFederationAuthenticationModule (WSFAM) и SessionAuthenticationModule SAM для хранения сведений о сеансе, это в первую очередь ClaimsPrincipal связано с прошедшим проверку подлинности пользователем и временем начала сеанса и истечения срока действия.
В пассивных сценариях WSFederationAuthenticationModule вызовы в SessionAuthenticationModule конвейер проверки подлинности (SAM) создают маркер сеанса из ClaimsPrincipal объекта, представляющего прошедшего проверку подлинности пользователя. SAM использует настроенный SessionSecurityTokenHandler для создания маркера и сериализации его в файл cookie (и десериализации маркера из файла cookie при последующих запросах). SAM использует экземпляр настроенного CookieHandler класса для записи файла cookie обратно в HTTP-ответ. Затем этот файл cookie возвращается клиенту и при последующих запросах клиент может представить файл cookie, а не вернуться к поставщику удостоверений для повторного получения маркера безопасности. Дополнительные сведения о работе сеансов с WIF см. в разделе "Управление сеансами WIF".
Замечание
Элемент <конфигурации securityTokenHandlers> можно использовать для указания SessionSecurityTokenHandler того, что несет ответственность за защиту сеансов приложения. Разработчики должны использовать осторожность при изменении этого параметра конфигурации, так как неправильно настроенная система может привести к компрометации приложений. Например, указание производной SessionSecurityTokenHandler и передачи пустой коллекции преобразований (CookieTransform) в базу приведет к сериализации удостоверения пользователей в файл cookie, который не был защищен. Это может позволить злоумышленнику изменить удостоверение и, следовательно, изменить права доступа.
Если маркер сеанса находится в эталонном режиме, то есть его SessionSecurityToken.IsReferenceMode свойство trueимеет значение, обработчик маркера сеанса сериализует только свойства маркера сеанса, необходимые для повторного создания ключа в файле SessionSecurityTokenCache. В случае SessionSecurityTokenCacheKey по умолчанию класс используется для представления ключей кэша, а обработчик маркеров записывает SessionSecurityToken.ContextId и SessionSecurityToken.KeyGeneration свойства маркера. Если маркер сеанса не находится в эталонном режиме, SessionSecurityToken.IsReferenceMode то есть свойство false, то помимо свойств, упомянутых ранее, обработчик вызывает ApplyTransforms метод в массиве байтов, сериализованный из маркера, и сохраняет результирующее значение в файле cookie. Дополнительные сведения о сериализации маркера см. в этом методе SessionSecurityTokenHandler.WriteToken(XmlWriter, SecurityToken) .
Свойство Transforms получает список преобразований, применяемых к маркеру сеанса в методе ApplyTransforms . Все преобразования являются производными от CookieTransform класса. В случае DeflateCookieTransform по умолчанию применяется и ProtectedDataCookieTransform применяется. Использует ProtectedDataCookieTransform API защиты данных (DPAPI) для защиты материала cookie. DPAPI использует ключ, относящийся к компьютеру, на котором он работает в своих алгоритмах защиты. По этой причине обработчик маркера сеанса по умолчанию не подходит для использования в сценариях веб-фермы, так как в таких сценариях маркеры, записанные на одном компьютере, могут потребоваться считывать на другом компьютере. Для обхода этой проблемы можно использовать множество стратегий. Например, доступны следующие возможности:
Замените значение по умолчанию SessionSecurityTokenHandler параметром MachineKeySessionSecurityTokenHandler. Позволяет MachineKeySessionSecurityTokenHandler указать ключи подписывания и шифрования в элементе ASP.NET
<machineKey>в файле конфигурации.Предоставьте обработчик события FederatedAuthentication.FederationConfigurationCreated в файле global.asax.cs и замените обработчик маркера сеанса по умолчанию экземпляром SessionSecurityTokenHandler , который содержит список преобразований, включая RsaSignatureCookieTransform и RsaEncryptionCookieTransform. Новый экземпляр можно создать, вызвав один из конструкторов, который принимает список преобразований.
Наследуйте пользовательское преобразование из CookieTransform базового класса и используйте приведенный выше метод, чтобы включить его в список примененных преобразований.
Наследуйте пользовательский обработчик маркеров и SessionSecurityTokenHandler реализуйте собственный механизм.
Дополнительные сведения об использовании сеансов в сценариях веб-ферм см. в разделе WIF и веб-фермы.
Он SessionSecurityTokenHandler включен в коллекцию обработчиков маркеров по умолчанию. Однако его можно заменить пользовательским обработчиком маркеров сеанса, сначала указав <элемент remove> под элементом <securityTokenHandlers> , чтобы удалить обработчик по умолчанию из коллекции, а затем добавить обработчик пользовательского маркера с помощью <элемента добавления> . По умолчанию можно указать время существования маркера по умолчанию, включив <элемент sessionTokenRequirement> в <add> элемент. Вы можете разработать пользовательский обработчик маркеров для принятия пользовательских элементов конфигурации в <add> элементе, переопределив LoadCustomConfiguration метод, чтобы предоставить логику для их обработки.
Конструкторы
| Имя | Описание |
|---|---|
| SessionSecurityTokenHandler() |
Инициализирует новый экземпляр SessionSecurityTokenHandler класса, использующего преобразования cookie по умолчанию и время существования маркера. |
| SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>, TimeSpan) |
Инициализирует новый экземпляр SessionSecurityTokenHandler класса, использующего указанные преобразования cookie и время существования маркера. |
| SessionSecurityTokenHandler(ReadOnlyCollection<CookieTransform>) |
Инициализирует новый экземпляр SessionSecurityTokenHandler класса, использующего указанные преобразования cookie. |
Поля
| Имя | Описание |
|---|---|
| DefaultCookieTransforms |
Коллекция только для чтения, содержащая список преобразований по умолчанию, применяемых к файлам cookie, DeflateCookieTransform а также к ProtectedDataCookieTransformфайлам cookie. |
| DefaultLifetime |
Константа, указывающая время существования по умолчанию для файлов cookie, десять часов. |
Свойства
| Имя | Описание |
|---|---|
| CanValidateToken |
Возвращает значение, указывающее, поддерживает ли этот обработчик проверку маркеров типа SessionSecurityToken. |
| CanWriteToken |
Возвращает значение, указывающее, может ли этот обработчик записывать маркеры типа SessionSecurityToken. |
| Configuration |
Возвращает или задает SecurityTokenHandlerConfiguration объект, предоставляющий конфигурацию для текущего экземпляра. (Унаследовано от SecurityTokenHandler) |
| ContainingCollection |
Возвращает коллекцию обработчика маркеров, содержащую текущий экземпляр. (Унаследовано от SecurityTokenHandler) |
| CookieElementName |
Возвращает имя элемента cookie. |
| CookieNamespace |
Возвращает пространство имен для элемента cookie. |
| DefaultTokenLifetime |
Возвращает время существования маркера по умолчанию. |
| TokenLifetime |
Возвращает или задает время существования маркера. |
| TokenType |
Возвращает тип маркеров, которые обрабатывает этот обработчик. |
| Transforms |
Возвращает преобразования, которые будут применены к файлу cookie. |
Методы
| Имя | Описание |
|---|---|
| ApplyTransforms(Byte[], Boolean) |
Применяет преобразования, указанные свойством Transforms , чтобы кодировать или декодировать указанный файл cookie. |
| CanReadKeyIdentifierClause(XmlReader) |
Возвращает значение, указывающее, является ли xml-элемент, на который ссылается указанный модуль чтения XML, является предложением идентификатора ключа, которое можно десериализировать с помощью этого экземпляра. (Унаследовано от SecurityTokenHandler) |
| CanReadToken(String) |
Возвращает значение, указывающее, можно ли десериализировать указанную строку как маркер типа, обрабатываемого этим экземпляром. (Унаследовано от SecurityTokenHandler) |
| CanReadToken(XmlReader) |
Возвращает значение, указывающее, находится ли средство чтения в элементе |
| CanWriteKeyIdentifierClause(SecurityKeyIdentifierClause) |
Возвращает значение, указывающее, можно ли сериализовать указанное предложение идентификатора ключа этим экземпляром. (Унаследовано от SecurityTokenHandler) |
| CreateSecurityTokenReference(SecurityToken, Boolean) |
При переопределении в производном классе создает ссылку маркера безопасности для маркеров, обработанных этим классом. Этот метод обычно вызывается службой маркеров безопасности (STS). (Унаследовано от SecurityTokenHandler) |
| CreateSessionSecurityToken(ClaimsPrincipal, String, String, DateTime, DateTime) |
SessionSecurityToken Создает на основе указанного субъекта утверждений и диапазона времени, в течение которого маркер действителен. |
| CreateToken(SecurityTokenDescriptor) |
Создает маркер безопасности на основе указанного дескриптора маркера. |
| DetectReplayedToken(SecurityToken) |
При переопределении в производном классе вызывает исключение, если указанный маркер обнаруживается как воспроизводимый. (Унаследовано от SecurityTokenHandler) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetTokenTypeIdentifiers() |
Возвращает URI типа маркера для типов маркеров, которые могут обрабатываться этим обработчиком. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| LoadCustomConfiguration(XmlNodeList) |
Загружает настраиваемую конфигурацию из XML. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ReadKeyIdentifierClause(XmlReader) |
При переопределении в производном классе десериализирует XML, на который ссылается указанный модуль чтения XML, в предложение идентификатора ключа, которое ссылается на маркер, обработанный производным классом. (Унаследовано от SecurityTokenHandler) |
| ReadToken(Byte[], SecurityTokenResolver) |
Считывает SessionSecurityToken из потока байтов с помощью указанного сопоставителя маркеров. |
| ReadToken(String) |
При переопределении в производном классе десериализирует указанную строку маркером типа, обрабатываемого производным классом. (Унаследовано от SecurityTokenHandler) |
| ReadToken(XmlReader, SecurityTokenResolver) |
Считывает указанный SessionSecurityToken средство чтения XML и сопоставителя маркеров. |
| ReadToken(XmlReader) |
Считывает указанный SessionSecurityToken модуль чтения XML. |
| SetTransforms(IEnumerable<CookieTransform>) |
Задает преобразования, которые будут применены к файлам cookie. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| TraceTokenValidationFailure(SecurityToken, String) |
Трассирует событие сбоя во время проверки маркеров безопасности при включении трассировки. (Унаследовано от SecurityTokenHandler) |
| TraceTokenValidationSuccess(SecurityToken) |
Трассирует успешную проверку события маркеров безопасности при включении трассировки. (Унаследовано от SecurityTokenHandler) |
| ValidateSession(SessionSecurityToken) |
Определяет, является ли сеанс, связанный с указанным маркером, по-прежнему допустимым. Допустимость определяется путем проверки ValidFrom и ValidTo свойств указанного токена. Исключение возникает, если сеанс больше недействителен. |
| ValidateToken(SecurityToken) |
Проверяет указанный токен и возвращает свои утверждения. |
| ValidateToken(SessionSecurityToken, String) |
Проверяет указанный маркер сеанса и возвращает свои утверждения. |
| WriteKeyIdentifierClause(XmlWriter, SecurityKeyIdentifierClause) |
При переопределении в производном классе сериализует указанное предложение идентификатора ключа в XML. Предложение идентификатора ключа должно иметь тип, поддерживаемый производным классом. (Унаследовано от SecurityTokenHandler) |
| WriteToken(SecurityToken) |
При переопределении в производном классе сериализует указанный маркер безопасности в строку. Маркер должен иметь тип, обработанный производным классом. (Унаследовано от SecurityTokenHandler) |
| WriteToken(SessionSecurityToken) |
Сериализует указанный токен в массив байтов. |
| WriteToken(XmlWriter, SecurityToken) |
Сериализует указанный токен с помощью указанного модуля записи XML. |