Распознаватель маркеров безопасности используется для преобразования идентификатора ключа безопасности в маркер безопасности. Как правило, идентификаторы ключей безопасности отправляются по открытому каналу, поскольку маркеры уже известны.

Чтобы настроить распознаватели в обработчике маркеров, необходимо знать, какие сертификаты будут использоваться для подписывания маркеров или сообщений, принимаемых службой. Для каждого обработчика маркеров создаются два распознавателя:

  1. Распознаватель маркеров службы, в котором хранится список известных службе сертификатов по отношению к собственному удостоверению. Эти сертификаты используются для разрешения маркеров шифрования во входящих сообщениях и маркерах.

  2. Распознаватель маркеров поставщика, в котором хранится список известных службе сертификатов по отношению к поставщикам, которым служба доверяет. Эти сертификаты используются для разрешения маркеров подписи во входящих сообщениях и маркерах безопасности.

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

  Копировать код
SecurityTokenHandlerCollection collection = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection();
	
// Создание распознавателя маркеров службы на основе сертификата службы. List<SecurityToken> serviceTokens = new List<SecurityToken>(); // Предполагается, что данный сертификат службы задан в другом месте serviceTokens.Add(new X509SecurityToken(serviceCertificate)); SecurityTokenResolver serviceResolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(serviceTokens.AsReadOnly(), false); collection.Configuration.ServiceTokenResolver = serviceResolver;

// Создание распознавателя маркеров поставщика, который обращается к хранилищу "Доверенные лица". X509CertificateStoreTokenResolver certificateStoreIssuerResolver = new X509CertificateStoreTokenResolver(StoreName.TrustedPeople, StoreLocation.LocalMachine); collection.Configuration.IssuerTokenResolver = certificateStoreIssuerResolver;