WCF вызывает в ответ службу WSE 2.0 WS-Security со встроенными токенами безопасности - "Не удается найти аутентификатор токена"

У меня есть веб-сервис в.NET 1.1 и WSE 2.0, который использует WS-Security с сертификатами x509 для подписи и шифрования. Я пытаюсь настроить клиент WCF для соединения с этим сервисом, и это оказывается сложнее, чем я ожидал.

Я преодолел большинство проблем с версиями, используя пользовательскую привязку, но я застрял на последнем замечании. Веб-сервис включает в себя два элемента BinarySecurityToken в ответном конверте SOAP - один для сертификата шифрования, другой для сертификата подписи.

Кажется, проблема в том, что WCF задыхается от второго токена. Это сообщение об ошибке:

"Не удалось найти средство проверки подлинности токена для типа токена System.IdentityModel.Tokens.X509SecurityToken. Токены этого типа не могут быть приняты в соответствии с текущими настройками безопасности".

Я нашел этот разговор на MSDN, который описывает точную проблему, с которой я столкнулся; но, к сожалению, это не дает хорошего разрешения. Создание кодировщика сообщений для взлома конверта во что-то, что WCF может обработать, кажется мне неправильным. WSE 2.0 может нормально обрабатывать встроенные токены безопасности - должен быть способ заставить WCF сделать то же самое.

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

Вот элемент привязки безопасности, который я сейчас использую:

Dim lSBE As New System.ServiceModel.Channels.AsymmetricSecurityBindingElement()

Dim lInitiatorTokenParameters As New System.ServiceModel.Security.Tokens.X509SecurityTokenParameters
lInitiatorTokenParameters.InclusionMode = System.ServiceModel.Security.Tokens.SecurityTokenInclusionMode.AlwaysToRecipient
lInitiatorTokenParameters.X509ReferenceStyle = System.ServiceModel.Security.Tokens.X509KeyIdentifierClauseType.RawDataKeyIdentifier
lInitiatorTokenParameters.RequireDerivedKeys = False
lSBE.InitiatorTokenParameters = lInitiatorTokenParameters

Dim lRecipientTokenParameters As New System.ServiceModel.Security.Tokens.X509SecurityTokenParameters
lRecipientTokenParameters.InclusionMode = System.ServiceModel.Security.Tokens.SecurityTokenInclusionMode.AlwaysToRecipient
lRecipientTokenParameters.X509ReferenceStyle = System.ServiceModel.Security.Tokens.X509KeyIdentifierClauseType.RawDataKeyIdentifier
lRecipientTokenParameters.RequireDerivedKeys = False
lSBE.RecipientTokenParameters = lRecipientTokenParameters

lSBE.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
lSBE.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Rsa15
lSBE.SetKeyDerivation(False)
lSBE.IncludeTimestamp = True
lSBE.AllowSerializedSigningTokenOnReply = True
lSBE.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt

0 ответов

Другие вопросы по тегам