Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows Communication Foundation (WCF) версии 1 реализует протоколы WS-Atomic transaction и WS-Coordination версии 1.0. Дополнительные сведения о версии 1.1 см. в разделе "Протоколы транзакций".
Спецификация и документ | Ссылка |
---|---|
WS-Coordination | http://specs.xmlsoap.org/ws/2004/10/wscoor/wscoor.pdf |
WS-AtomicTransaction | http://specs.xmlsoap.org/ws/2004/10/wsat/wsat.pdf |
Взаимодействие с этими спецификациями протокола требуется на двух уровнях: между приложениями и между диспетчерами транзакций (см. следующий рисунок). Спецификации подробно описывают форматы сообщений и обмен сообщениями для обоих уровней взаимодействия. Некоторые средства безопасности, надежности и кодировка для обмена приложениями применяются так же, как и для обычного обмена приложениями. Однако для успешного взаимодействия между диспетчерами транзакций требуется соглашение о конкретной привязке, так как оно обычно не настроено пользователем.
В этом разделе описывается спецификация транзакции WS-Atomic (WS-AT) с безопасностью и безопасная привязка, используемая для связи между диспетчерами транзакций. Описанный в этом документе подход успешно протестирован с другими реализациями WS-AT и WS-Coordination включая IBM, IONA, Sun Microsystems и другие.
На следующем рисунке показано взаимодействие между двумя диспетчерами транзакций, Transaction Manager 1 и Transaction Manager 2 и двумя приложениями, приложением 1 и приложением 2:
Рассмотрим типичный сценарий WS-Координации/WS-Atomic транзакций с одним инициатором (I) и одним участником (P). Инициатор и участник имеют диспетчеры транзакций (ITM и PTM соответственно). Двухфазная фиксация называется 2PC в данном разделе.
- СоздатьКонтекстКоординации
- Ответ на запрос создания контекста координации
- Регистрация (завершение процесса)
- Ответ на регистрацию
- Сообщение приложения
- CreateCoordinationContext с контекстом
- Регистрация (долговечный)
- Ответ на регистрацию
- Ответ на запрос создания контекста координации
- Регистрация (долговечный)
- Ответ на регистрацию
- Ответ на сообщение приложения
- Закрепление (завершение)
- Подготовка (2PC)
- Подготовка (2PC)
- Подготовлен (2PC)
- Подготовлен (2PC)
- Завершено (выполнение)
- Подтверждение (2PC)
- Подтверждение (2PC)
- Зафиксировано (2PC)
- Зафиксировано (2PC)
В этом документе описывается композиция спецификации WS-AtomicTransaction с безопасностью и описывается безопасная привязка, используемая для обмена данными между диспетчерами транзакций. Метод, описанный в этом документе, успешно протестирован на совместимость с другими реализациями WS-AT и WS-Coordination.
На рисунке и таблице показаны четыре класса сообщений из точки зрения безопасности:
Сообщения активации (CreateCoordinationContext и CreateCoordinationContextResponse).
Сообщения регистрации ("Register" и "RegisterResponse")
Протоколные сообщения (подготовка, откат, фиксация, аборт и т. д.).
Сообщения приложения.
Первые три класса сообщений считаются сообщениями Диспетчера транзакций, а их конфигурация привязки описана далее в разделе "Обмен сообщениями приложений". Четвертый класс сообщений — это сообщения между приложениями, которые описаны в разделе "Примеры сообщений" позже в этой теме. В этом разделе описываются привязки протокола, используемые для каждого из этих классов WCF.
В этом документе используются следующие пространства имен XML и связанные префиксы.
Приставка | Универсальный код ресурса (URI) пространства имен |
---|---|
s11 | http://schemas.xmlsoap.org/soap/envelope |
wsa | http://www.w3.org/2004/08/addressing |
wscoor | http://schemas.xmlsoap.org/ws/2004/10/wscoor |
wsat | http://schemas.xmlsoap.org/ws/2004/10/wsat |
t | http://schemas.xmlsoap.org/ws/2005/02/trust |
o | http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd |
xsd | http://www.w3.org/2001/XMLSchema |
Привязки менеджера транзакций
R1001. Диспетчеры транзакций должны использовать SOAP 1.1 и WS-Addressing 2004/08 для транзакций WS-Atomic и обмена сообщениями WS-Coordination.
Сообщения приложения не ограничены этими привязками и описаны далее.
Привязка HTTPS диспетчера транзакций
Привязка HTTPS диспетчера транзакций используется исключительно для обеспечения безопасности транспорта и установления доверия между каждой парой получателей отправителей в дереве транзакций.
Конфигурация транспорта HTTPS
Сертификаты X.509 используются для установки удостоверения Диспетчера транзакций. Требуется проверка подлинности клиента или сервера, а авторизация клиента или сервера остается в качестве сведений о реализации:
R1111: сертификаты X.509, представленные по проводу, должны иметь имя субъекта, соответствующее полному доменному имени (FQDN) исходного компьютера.
B1112: DNS должен быть функциональным между каждой парой отправитель-получатель в системе, чтобы проверки имени субъекта X.509 были успешны.
Настройка привязки активации и регистрации
WCF требует дуплексной привязки запроса и ответа с корреляцией по протоколу HTTPS. (Дополнительные сведения о корреляции и описаниях шаблонов обмена сообщениями запроса и ответа см. в разделе WS-Atomic Транзакция, раздел 8.)
Конфигурация привязки протокола 2PC
WCF поддерживает односторонние (датаграмма) сообщения по протоколу HTTPS. Корреляция между сообщениями оставляется как часть деталей реализации.
B2131: Реализации должны поддерживать wsa:ReferenceParameters
в соответствии с описанным в WS-Addressing для согласования сообщений WCF 2PC.
Смешанная привязка безопасности менеджера транзакций
Это альтернативная (смешанный режим) привязка, которая использует транспортную безопасность в сочетании с моделью выданных маркеров WS-Coordination для целей создания удостоверений. Активация и регистрация являются единственными элементами, которые отличаются между двумя привязками.
Конфигурация транспорта HTTPS
Сертификаты X.509 используются для установки удостоверения Диспетчера транзакций. Требуется аутентификация клиента и сервера, а авторизация клиента и сервера остается на усмотрение реализации.
Конфигурация привязки сообщений активации
Сообщения активации обычно не участвуют в взаимодействии, так как обычно они происходят между приложением и локальным диспетчером транзакций.
B1221: WCF использует дуплексную привязку HTTPS (описанную в протоколах обмена сообщениями) для сообщений активации. Сообщения запроса и ответа коррелируются при помощи WS-Addressing 2004/08.
WS-Atomic спецификация транзакций, раздел 8, описывает дополнительные сведения о корреляции и шаблонах обмена сообщениями.
R1222: После получения
CreateCoordinationContext
Координатор должен выдатьSecurityContextToken
с связанным секретомSTx
. Этот токен возвращается внутри заголовка по спецификации WS-Trust, содержащейt:IssuedTokens
.Если активация выполняется в существующем контексте координации, то заголовок
t:IssuedTokens
, связанный с существующим контекстом, должен передаваться в сообщенииSecurityContextToken
.
Для присоединения к исходящему t:IssuedTokens
сообщению необходимо создать новый wscoor:CreateCoordinationContextResponse
заголовок.
Конфигурация привязки сообщений регистрации
B1231: WCF использует дуплексную привязку HTTPS (описанную в протоколах обмена сообщениями). Сообщения запроса и ответа коррелируются при помощи WS-Addressing 2004/08.
WS-AtomicTransaction, раздел 8, описывает дополнительные сведения о корреляции и описаниях шаблонов обмена сообщениями.
R1232. Исходящие wscoor:Register
сообщения должны использовать режим проверки подлинности, описанный IssuedTokenOverTransport
в протоколах безопасности.
Элемент wsse:Timestamp
должен быть подписан при помощи выданного SecurityContextToken STx
. Эта подпись является подтверждением владения маркером, связанным с конкретной транзакцией, и используется для проверки подлинности участника, зачисленного в транзакцию. Сообщение RegistrationResponse отправляется обратно по протоколу HTTPS.
Конфигурация привязки протокола 2PC
WCF поддерживает односторонние (датаграмма) сообщения по протоколу HTTPS. Корреляция между сообщениями оставляется как часть деталей реализации.
B2131: Реализации должны поддерживать wsa:ReferenceParameters
в соответствии с описанным в WS-Addressing для согласования сообщений WCF 2PC.
Обмен сообщениями приложения
Приложения могут использовать любую конкретную привязку для сообщений приложений и приложений, если привязка соответствует следующим требованиям безопасности:
R2001: сообщения из приложения в приложение должны передавать
t:IssuedTokens
заголовок вместе сCoordinationContext
заголовком сообщения.R2002: целостность и конфиденциальность
t:IssuedToken
должны быть обеспечены.
Заголовок CoordinationContext
содержит wscoor:Identifier
. Хотя определение xsd:AnyURI
позволяет использовать как абсолютные, так и относительные URI, WCF поддерживает только wscoor:Identifiers
те, которые являются абсолютными URI.
Если wscoor:Identifier
wscoor:CoordinationContext
является относительным URI, то ошибки будут возвращены транзакционными службами WCF.
Примеры сообщений
Сообщения запроса и ответа CreateCoordinationContext
Следующие сообщения следуют шаблону запроса и ответа.
СоздатьКонтекстКоординации
<s:Envelope>
<s:Header>
<a:Action>http://.../ws/2004/10/wscoor/CreateCoordinationContext</Action>
<a:MessageID>urn:uuid:069f5104-fd88-4264-9f99-60032a82854e</MessageID>
<a:ReplyTo>
<Address>https://...</a:Address>
</a:ReplyTo>
<a:To>https://...</a:To>
<wsse:Security>
<u:Timestamp>
<wsu:Created>2005-12-15T23:36:09.921Z</wsu:Created>
<wsu:Expires>2005-12-15T23:41:09.921Z</wsu:Expires>
</u:Timestamp>
</wsse:Security>
</s:Header>
<s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<wscoor:CreateCoordinationContext>
<wscoor:CoordinationType>...</wscoor:CoordinationType>
</wscoor:CreateCoordinationContext>
</s:Body>
</s:Envelope>
Ответ на запрос создания контекста координации
<s:Envelope>
<!-- Data below is shown in the clear for
illustration purposes only. -->
<s:Header>
<a:Action>./ws/2004/10/wscoor/CreateCoordinationContextResponse </a:Action>
<a:RelatesTo>urn:uuid:069f5104-fd88-4264-9f99-60032a82854e</a:RelatesTo>
<a:To s:mustUnderstand="1">https://... </a:To>
<t:IssuedTokens>
<wst:RequestSecurityTokenResponse
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"
xmlns:wsc="http://schemas.xmlsoap.org/ws/2005/02/sc"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wst:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</wst:TokenType>
<wst:RequestedSecurityToken>
<wsc:SecurityContextToken>
<wssu:Identifier>
http://fabrikam123.com/SCTi
</wssu:Identifier>
</wsc:SecurityContextToken>
</wst:RequestedSecurityToken>
<wsp:AppliesTo>
http://fabrikam123.com/CCi
</wsp:AppliesTo>
<wst:RequestedAttachedReference>
<wsse:SecurityTokenReference >
<wsse:Reference
ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"
URI="http://fabrikam123.com/SCTi"/>
</wsse:SecurityTokenReference>
</wst:RequestedAttachedReference>
<wst:RequestedUnattachedReference>
<wsse:SecurityTokenReference>
<wsse:Reference
ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"
URI="http://fabrikam123.com/SCTi"/>
</wsse:SecurityTokenReference>
</wst:RequestedUnattachedReference>
<wst:RequestedProofToken>
<wst:BinarySecret
Type="http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey">
<!-- base64 encoded value -->
</wst:BinarySecret>
</wst:RequestedProofToken>
<wst:Lifetime>
<wssu:Created>2005-10-24T20:19:26.526Z</wssu:Created>
<wssu:Expires>2005-10-25T06:24:26.526Z</wssu:Expires>
</wst:Lifetime>
<wst:KeySize>256</wst:KeySize>
</wst:RequestSecurityTokenResponse>
</t:IssuedTokens>
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2005-12-15T23:36:12.015Z</u:Created>
<u:Expires>2005-12-15T23:41:12.015Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
<s:Body>
<wscoor:CreateCoordinationContextResponse>
<wscoor:CoordinationContext>
<wscoor:Identifier>
http://fabrikam123.com/CCi
</wscoor:Identifier>
<wscoor:Expires>...</wscoor:Expires>
<wscoor:CoordinationType>...</wscoor:CoordinationType>
<wscoor:RegistrationService>
<a:Address>https://...</a:Address>
<a:ReferenceParameters>
...
</a:ReferenceParameters>
</wscoor:RegistrationService>
</wscoor:CoordinationContext>
</wscoor:CreateCoordinationContextResponse>
</s:Body>
</s:Envelope>
Сообщения о регистрации
Ниже перечислены сообщения о регистрации.
Регистрация
<s:Envelope>
<s:Header>
<a:Action>http://schemas.xmlsoap.org/ws/2004/10/wscoor/Register</a:Action>
<a:MessageID>urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088e</a:MessageID>
<a:ReplyTo>
<a:Address>https://...</a:Address>
</a:ReplyTo>
<a:To>https://...</a:To>
<wsse:Security
s:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wssu:Timestamp wssu:Id="_0" >
<wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>
<wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>
</wssu:Timestamp>
<wsc:SecurityContextToken>
<wssu:Identifier>
http://fabrikam123.com/SCTi
</wssu:Identifier>
</wsc:SecurityContextToken>
<!-- supporting signature over the timestamp -->
<wsse:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>
<ds:Reference URI="#_0">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>
alRzyhjLgoUOYoh8cx4n75eTcUk=
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>YZYjnVvSOVasAQqQxaaviTSWtqI=</ds:SignatureValue>
<ds:KeyInfo>
<wsse:SecurityTokenReference
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Reference
URI="http://fabrikam123.com/SCTi"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</wsse:Signature>
</wsse:Security>
</s:Header>
<s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<wscoor:Register>
<wscoor:ProtocolIdentifier>...</wscoor:ProtocolIdentifier>
<wscoor:ParticipantProtocolService>
<a:Address>https://... </a:Address>
</wscoor:ParticipantProtocolService>
</wscoor:Register>
</s:Body>
</s:Envelope>
Регистрация ответа
<s:Envelope>
<s:Header>
<a:Action>
http://schemas.xmlsoap.org/ws/2004/10/wscoor/RegisterResponse
</a:Action>
<a:MessageID>urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088d</a:MessageID>
<a:RelatesTo>
urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088e
</a:RelatesTo>
<a:To>https://...</a:To>
<wsse:Security
s:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wssu:Timestamp>
<wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>
<wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>
</wssu:Timestamp>
</wsse:Security>
</s:Header>
<s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<wscoor:RegisterResponse>
<wscoor:CoordinatorProtocolService>
<a:Address>https://...</a:Address>
<a:ReferenceParameters>
...
</a:ReferenceParameters>
</wscoor:CoordinatorProtocolService>
</wscoor:RegisterResponse>
</s:Body>
</s:Envelope>
Сообщения двухфазного протокола фиксации
Следующее сообщение относится к протоколу двухфазной фиксации (2PC, two-phase commit protocol).
Зафиксировать
<s:Envelope>
<s:Header>
<a:Action>http://.../ws/2004/10/wsat/Commit</a:Action>
<a:To>https://...</a:To>
<wsse:Security
s:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wssu:Timestamp wssu:Id="_0" >
<wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>
<wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>
</wssu:Timestamp>
</wsse:Security>
</s:Header>
<s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<wsat:Commit />
</s:Body>
</s:Envelope>
Сообщения приложения
Ниже перечислены сообщения приложения.
Сообщение приложения-запрос
<s:Envelope>
<s:Header>
<!-- Addressing headers, all signed-->
<wsse:Security s:mustUnderstand="1">
<wssu:Timestamp wssu:Id="timestamp">
<wssu:Created>2005-10-25T06:29:18.703Z</wssu:Created>
<wssu:Expires>2005-10-25T06:34:18.703Z</wssu:Expires>
</wssu:Timestamp>
<wsse:BinarySecurityToken
wssu:Id="IA_Certificate"
ValueType="...#X509v3"
EncodingType="...#Base64Binary">
<!-- IA certificate -->
</wsse:BinarySecurityToken>
<e:EncryptedKey Id="encrypted_key">
<!-- ephemeral key encrypted for PA certificate -->
<e:ReferenceList xmlns:e="http://www.w3.org/2001/04/xmlenc#">
<e:DataReference URI="#encrypted_body"/>
<e:DataReference URI="#encrypted_CCi"/>
<e:DataReference URI="#encrypted_issuedtokens"/>
</e:ReferenceList>
</e:EncryptedKey>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<!-- signature over Addressing headers, Timestamp, and Body -->
</Signature>
</wsse:Security>
<wsse11:EncryptedHeader>
<!-- encrypted wscoor:CoordinationContext header containing CCi -->
</wsse11:EncryptedHeader>
<wsse11:EncryptedHeader>
<!-- encrypted wst:IssuedTokens header containing SCTi -->
<!-- wst:IssuedTokens header is taken verbatim from message #2 above, omitted for brevity -->
</wsse11:EncryptedHeader>
</s:Header>
<s:Body wssu:Id="body">
<!-- encrypted content of the Body element of the application message -->
<e:EncryptedData Id="encrypted_body"
Type="http://www.w3.org/2001/04/xmlenc#Content"
xmlns:e="http://www.w3.org/2001/04/xmlenc#">
...
</e:EncryptedData>
</s:Body>
</s:Envelope>