Встроенные обработчики маркеров безопасности

Ниже перечислены встроенные обработчики маркеров WIF.

KerberosSecurityTokenHandler

KerberosSecurityTokenHandler проверяет маркеры типа KerberosReceiverSecurityToken. Маркеры такого типа, используемые WCF при проверке подлинности Kerberos, являются оболочкой для удостоверений Windows и основаны на билетах Kerberos, принимаемых в сообщении SOAP. Маркеры такого типа не используются при проверке подлинности SPNego или SSPI.

В этом обработчике не реализованы методы других обработчиков маркеров, в том числе ReadToken и WriteToken. Причина заключается в том, что в отличие от других типов маркеров, например SAML и X.509, тип KerberosReceiverSecurityToken не имеет сериализуемого представления.

RsaSecurityTokenHandler

RsaSecurityTokenHandler обрабатывает маркеры типа RsaSecurityToken, основанные на ключе, который создается с помощью алгоритма безопасности RSA.

X509SecurityTokenHandler

X509SecurityTokenHandler обрабатывает маркеры типа X509SecurityToken, основанные на сертификате X.509.

X509SecurityTokenHandler также обрабатывает хранящиеся в маркерах ключи безопасности данных X.509.

Saml11SecurityTokenHandler

Saml11SecurityTokenHandler обрабатывает маркеры безопасности SAML 1.1.

Saml2SecurityTokenHandler

Saml2SecurityTokenHandler обрабатывает маркеры безопасности SAML 2.

MembershipUserNameSecurityTokenHandler и WindowsUserNameSecurityTokenHandler

Классы MembershipUserNameSecurityTokenHandler и WindowsUserNameSecurityTokenHandler, производные от класса UserNameSecurityTokenHandler, обрабатывают маркеры типа UsernameSecurityToken. Эти обработчики являются взаимоисключающими и отличаются только способом обработки маркеров. MembershipUserNameSecurityTokenHandler позволяет при обработке маркеров указать поставщик членства MembershipProvider. WindowsUserNameSecurityTokenHandler проверяет маркер путем сопоставления пользователя учетной записи Windows. Эти два обработчика маркеров нельзя одновременно использовать в одной коллекции обработчиков маркеров.

WindowsSecurityToken

Наконец, для одного из типов маркеров, а именно для WindowsSecurityToken, используемого платформой WCF, обработчик отсутствует. Этот маркер является оболочкой для удостоверения Windows. Он используется при предоставлении маркера Windows в процессе проверки подлинности на транспортном уровне, например на уровне net.tcp. Этот маркер всегда входит в коллекцию маркеров начальной загрузки.

Извлечь удостоверение Windows из маркера WindowsSecurityToken и преобразовать его в удостоверение IClaimsIdentity можно следующим образом:

  Копировать код
IClaimsIdentity rehydratedIdentity = new WindowsClaimsIdentity( (token as WindowsSecurityToken).WindowsIdentity.Token, (token as WindowsSecurityToken).WindowsIdentity.AuthenticationType);

WIF также предоставляет обработчики маркеров для типов маркеров, не связанных непосредственно с проверкой подлинности. Эти обработчики перечислены ниже.

EncryptedSecurityTokenHandler

EncryptedSecurityTokenHandler обрабатывает маркеры типа EncryptedSecurityToken. Этот тип маркеров обеспечивает шифрование тех типов маркеров, которые изначально не поддерживают такую возможность. Например, маркер SAML 1.1 не позволяет шифровать свое содержимое. Таким образом, чтобы выпустить зашифрованное утверждение SAML11, создайте оболочку маркера безопасности SAML с помощью класса EncryptedSecurityToken и предоставьте необходимые учетные данные EncryptingCredentials.

Класс EncryptedSecurityTokenHandler вызывает содержащую его коллекцию для обработки маркера безопасности после расшифровки. При добавлении в коллекцию маркера EncryptedSecurityTokenHandler свойству ContainingCollection автоматически присваивается ссылка на родительскую коллекцию. Таким образом, расшифровка маркера выполняется в два этапа. Первый этап заключается в преобразовании маркера из необработанного зашифрованного представления в расшифрованное, которое обрабатывается обработчиком EncryptedSecurityTokenHandler. Затем содержащая коллекция вызывается с расшифрованным маркером для дальнейшего преобразования маркера из XML-формата в хранящийся в памяти объект SecurityToken.

EncryptedSecurityTokenHandler также обрабатывает хранящиеся в маркерах зашифрованные ключи.

SessionSecurityTokenHandler

SessionSecurityTokenHandler обрабатывает маркеры типа SessionSecurityToken. Маркеры этого типа содержат утверждения для прошедшего проверку подлинности, чтобы пользователю не требовалось проходить проверку подлинности при каждом запросе. Дополнительные сведения см. в разделе Общие сведения о модуле федеративной проверки подлинности (WS-Federated Authentication Module).

Внимание!
При повторной сериализации маркеров начальной загрузки SAML (например при использовании ActAs) с использованием нескольких потоков необходимо синхронизировать вызовы; в противном случае маркеры могут быть повреждены. Дополнительные сведения об ActAs см. в разделах Сценарий делегирования удостоверения и Вопросы и ответы.

Использование в Windows Identity Foundation обработчиков маркеров безопасности для выпуска маркеров

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

  1. Вызов метода GetScope. Этот метод загружает сведения о проверяющей стороне.

  2. Вызов метода CreateSecurityTokenDescriptor. Этот метод просто создает объект SecurityTokenDescriptor на основе сведений об области, полученных на шаге 1.

  3. Вызов метода GetSecurityTokenHandler. В качестве параметра используется тип маркера из класса RequestSecurityToken, переданного методу Issue.

  4. Вызов метода GetIssuerName и добавление в дескриптор маркера имени поставщика (имени службы STS).

  5. Вызов метода GetTokenLifetime и добавление в дескриптор маркера срока действия маркера.

  6. Вызов метода GetProofToken и добавление в дескриптор маркера дескриптора маркера проверки.

  7. Вызов метода GetOutputClaimsIdentity и добавление в дескриптор маркера коллекции выходных субъектов.

  8. Вызов метода CreateToken. Этот метод реализован в обработчике маркеров безопасности. В качестве параметра используется созданный дескриптор маркеров безопасности.

  9. Вызов метода GetResponse. Этот метод получает объект RequestSecurityTokenResponse.

Как правило, при разработке службе STS необходимо просто создать класс, производный от класса SecurityTokenService, и реализовать методы GetScope и GetOutputClaimsIdentity. Для более тщательного контроля над процессом обработки маркеров переопределите приведенные здесь методы.