Распознаватель маркеров безопасности используется для преобразования идентификатора ключа безопасности в маркер безопасности. Как правило, идентификаторы ключей безопасности отправляются по открытому каналу, поскольку маркеры уже известны.
Чтобы настроить распознаватели в обработчике маркеров, необходимо знать, какие сертификаты будут использоваться для подписывания маркеров или сообщений, принимаемых службой. Для каждого обработчика маркеров создаются два распознавателя:
- Распознаватель маркеров службы, в котором хранится список
известных службе сертификатов по отношению к собственному
удостоверению. Эти сертификаты используются для разрешения маркеров
шифрования во входящих сообщениях и маркерах.
- Распознаватель маркеров поставщика, в котором хранится список
известных службе сертификатов по отношению к поставщикам, которым
служба доверяет. Эти сертификаты используются для разрешения
маркеров подписи во входящих сообщениях и маркерах
безопасности.
Распознаватели маркеров нельзя настроить декларативным путем. В приведенном ниже фрагменте кода показано, как создать и настроить распознаватели маркеров программным путем.
Копировать код | |
---|---|
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; |