ОБЗОРЫ
Продолжение. Начало см. PC Week/RE, 2004, N 27, с. 20; N 28, с. 19; N 29, с. 18; N 30, с. 20; N 31, с. 22; N 32, с. 31.
В предыдущей части обзора было рассказано, как в рамках стандартов Global XML Web Services Architecture (GXA) обеспечивается безопасность обмена сообщениями и устанавливаются доверительные отношения между участниками. Однако данные для установления подобного доверия нужно как-то получать, описывать и хранить. Технологии, о которых пойдет речь ниже, решают эту задачу. Кроме того, они позволяют создать деревья доменов, находящихся в доверительных отношениях, и обеспечить такую востребованную функцию, как однократная аутентификация для доступа ко множественным ресурсам.
WS-Policy и Web Services Policy Assertions Language (WS-PolicyAssertions)
Статус: черновик, версия 1.01, 2 June 2003.
Авторы: BEA Systems, IBM, Microsoft, SAP AG.
<wsp:Policy xmlns.wsp="..."xmlns:wsse="..."> <wsp:ExactlyOne> <wsp:AII wsp:Preference="100"> <wsse:SecurityToken> <wsse:TokenType>wsse:Kerberosv5TGT</wsse:To kenType> </wsse:SecurityToken> <wsse:Integrity> <wsse:Algorithm Type="wsse:AlgSig- nature" URI="http://www.w3.org/2000/09/xmlenc#aes"/> </wsse:lntegrity> </wsp:All> <wsp:AII wsp:Preference="1"> <wsse:SecurityToken> <wsse:TokenType>wsse:X509v3</wsse:Token- Type> </wsse:SecurityToken> <wsse:lntegrity> <wsse:Algorithm Type="wsse:AlgEn- ciyption" URI="http://www.w3.org/2001/04/xmlenc#3des- cbc" /> </wsse:|ntegrity> </wsp:AII> <wsp:ExactlyOne> </wsp:Policy |
Рис. 1. Пример политики безопасности для Web-сервиса.
Перечисляется два взаимоисключающих варианта, когда сервис может быть использован,
- для протоколов Kerberos и X.509. Для каждого из них предъявляются еще и требования
к алгоритмам шифрования и цифровой подписи
WS-Policy определяет XML-грамматику для описания возможностей и характеристик WS-системы, а также требований, предъявляемых ею к клиентам. Наборы подобных описаний, или утверждений (assertions), сводятся в документы, называемые политиками. Утверждения в WS-Policy формируются из выражений (expressions) и могут быть как простыми декларациями наличия у сервиса каких-либо свойств, так и сложными параметризованными проверками входящих данных на соответствие каким-то критериям. В типичных WS-приложениях политики задают, как правило, условия, при которых сервис готов к обслуживанию клиента. Скажем, они контролируют свойства схемы аутентификации или транспортного протокола. Клиент может запросить эту информацию и использовать ее, чтобы решить, обращаться к сервису или нет.
<MyElement xmllns:wsp="http;//schemas.xml- soap.org/ws/2002/12/policy" wsp:PolicyURIs="http://www.fab- rikam123.com/policies#P1 http://www.fabrikam123.com/policies#P3" /> |
Рис. 2. Пример ссылки на политику безопасности,
определяемой WSPolicyAttachement
Грамматика WS-Policy состоит из трех компонентов: контейнерного элемента <wsp:Policy>, операторов группирования нескольких проверок (они и называются операторами определения политики) и набора общих атрибутов, используемых для обозначения способа применения проверки. В качестве примеров используемых операторов можно привести следующие: <wsp:ExactlyOne>, обозначающий требование сделать единственный выбор между перечисленными в нем блоками-условиями; <wsp:All>, показывающий, что все включенные в него элементы-условия должны быть выполнены; <wsp:OneOrMore>, который требует, чтобы было удовлетворено условие как минимум в одном из его дочерних элементов. Допускается также оператор <wsp:Policy>, имеющий семантику, аналогичную <wsp:All>, и позволяющий определить внутри данной политики вложенную политику.
<wsp:PolicyAttachment> <wsp:AppliesTo> <wsa:EndpointReference xmln:fabrikam="..."> <wsa:Address>http://www.fabrikam123.com/ac- ct</wsa:Address> <wsa:PortType>fabrikam:lnventoryPortType</wsa: PortType> <wsa:ServiceName>fabrikam:lnventorySeivice</w sa:ServiceName> </wsa:Endpointreference> </wsp:AppliesTo> <wsp:PolicyReference URI="http://www.fab- rikam123.com/acct-policy.xml" /> <wsse:Security> <ds:Signature> ... </ds:Signature> </wsse:Security> </wsp:PolicyAttachment> |
Рис. 3. Пример приложения, определяющего привязку к политике для развернутой
"конечной точки" (задается при помощи WS-Addressing), для которой есть WSDL-описание
Внутри операторов находятся утверждения, соответствующие проверкам. Грамматика этих утверждений - дело расширений. В частности, для разметки требований безопасности могут использоваться теги, определенные в WS-Security. Эти теги дополняются атрибутом wsp:Usage, указывающим на тип использования утверждения. Он может быть определен и для всей политики в целом - через тег <Assertion>. Определено пять значений атрибута: Required (правило обязано выполняться), Optional (желательное, но необязательное правило), Rejected (при выполнении условия входное сообщение отвергается), Observed (проверка будет примерена ко всем запросам, и клиент будет информирован о ее результатах), Ignored (условие будет проверено, но никаких действий предпринято не будет).
Может показаться, что определенных выше значений слишком много. Однако в этом есть смысл - утверждения могут применяться для концептуально разных целей, например, одни из них описывают выдаваемые сервисом гарантии приватности обмена информацией, а другие - требования к шифрованию. В первом случае это просто декларация возможностей, а во втором - требования, выдвигаемые к клиенту.
Сочетание операторов группирования и проверок позволяет создавать сложные проверки из простых. Так, используя приведенные выше операторы, можно организовать проверочную таблицу - элементы ее строк логически объединяются операцией "И", а сами строки объединяются операцией "ИЛИ". Атрибуты же задают либо отрицание результатов почтовой проверки, либо их обязательное соблюдение, либо игнорирование и т.д.
Помимо описанных возможностей есть еще средство задать имя для политики (в том числе вложенной в другую политику) - через атрибут wsu:Id в теге <Policy>. Это поле добавляется к URI-адресу файла политики для формирования нового, уникального URI. Если адрес политики http://aaa.com/policies , а wsu:Id вложенной политики равно "P1", то ссылаться на нее можно по адресу: http://aaa.com/policies#P1. Политику, получившую такой составной URI, можно впоследствии использовать как "элементарную" проверку в других политиках при помощи оператора <wsp:PolicyReference>. Таким образом можно создавать иерархию политик.
В заключение следует сказать, что спецификация требует, чтобы политики принимались клиентом, только если они подписаны цифровой подписью и имеют жетон безопасности (ЖБ), определяющий право подписанта "говорить" от имени домена, содержащего политику.
Примечание. Web Services Policy Assertions Language (WS-PolicyAssertions) - вспомогательная спецификация, предоставляющая некоторый набор тегов для описания утверждений, часто используемых в Web-сервисных приложениях. Таковыми являются описание кодировки текста, альтернативные языки, используемые в тексте сообщения, версия какой-либо спецификации, поддерживаемой сервисом, соответствие сообщения некоему предикату (предварительное условие) и пр. Также дается список базирующихся на XPath функций выборки данных из сообщений - например, wsp:GetBody (получение тела из конверта сообщения), wsp:IsInBody (проверка, находится ли нужный узел XML-сообщения в теле этого сообщения), wsp:IsInHeader (проверка нахождения узла в заголовке) и др.
Web Services Policy Attachment (WS-PolicyAttachment)
Статус: авторская спецификация, версия 1.01, июнь 2003.
Авторы: Microsoft, IBM, BEA Systems, SAP.
Как правило, политики не хранятся сами по себе - они должны быть приспособлены к существующей инфраструктуре. WS-PolicyAttachment определяет общий механизм для привязки описаний политик к описаниям сервисов, а также три его специфических варианта: привязки на уровне WSDL-типов, привязки к элементам каталогов UDDI и привязки к конкретным реализациям сервисов через WSDL-описания.
Подключение политик к ресурсам
Общий механизм привязки имеет две вариации. Первая позволяет включать в XML-описания ресурсов ссылки на политики как неотъемлемую часть этих описаний, а вторая дает возможность ассоциировать политики с произвольным ресурсом вне зависимости от того, какого типа описание он имеет. Достигается это созданием нового XML-документа, в котором данная связь прописывается.
Для реализации первого механизма WS-PolicyAttachment определяет два ссылочных атрибута, которые можно включать в текст произвольного XML-элемента: wsp:PolicyURIs, содержащий список из одного или более URI-адресов политик, и wsp:PolicyRefs, содержащий аналогичный список, но из имен QNames. В случае, когда указано более одного имени QName или URI, формируется некоторая объединенная политика по правилам, принятым в конкретной реализации.
Второй обобщенный механизм фактически задает правило составления связи между двумя независимыми сущностями - политикой и ресурсом. Эта связь задается XML-документом, имеющим внутри элемент <wsp:PolicyAttachment>. Данный элемент состоит из трех компонентов, описывающих границу применения (scope) политики*1 (т.е. указатели на ресурсы, к которым она применима), утверждения политики (или ссылки на файлы политик), используемые в рамках этих границ, и произвольную дополнительную информацию для обеспечения безопасности.
_____
*1 Границы применения приложения определяются элементом и комбинацией любых других XML-тегов внутри него, например URI, заданным командами WS-Addressing. Если в перечисляется несколько ресурсов, то политика будет применена ко всем ним.
Запрос <s12:Envelope xmlns:s12=’http://www.w3.org/2003/05/soap- envelope’ xmlns:wsa=’http://schemas.xmlsoap.org/ws/2004/ 03/addressing’ xmlns:wsx=’http://schemas.xmlsoap.org/ws/2004/ 03/mex’ > <s12:Header> <wsa:Action> http://schemas.xmlsoap.org/ws/2004/03/mex/Get- Policy/Request </wsa:Action> <wsa:MessagelD> uuid:73d7edfc-5c3c-49b9-ba46- 2480caee43e9 </wsa:MessagelD> <wsa:ReplyTo> <wsa:Address>http://www.example.com/MyEnd- point </wsa:Address> </wsa:ReplyTo> <wsa:To>http://www.example.org/YourEnd- point</wsa:To> <ex:MyRefProp xmlns:ex=’http://www,exam- ple.com/refs’ > 78f2dc229597b529b81c4bef76453c96 </ex:MyRefPtop> </s12:Header> <s12:Body> <wsx:GetPolicy/> </s12:Body> <s12:Envelope> Ответ <s12:Envelope xmlns:s12=’http://www.w3.org/2003/05/soap- envelope’ xmlns:wsa=’http://schemas.xnilsoap.org/ws/2004/ 03/addressing’ xmlns:wsp=’http://schemas.xmlsoap.org/ws/2002 /12/policy’ xmlns:wsx=’http://schemas.xmlsoap.org/ws/2004/ 03/mex’ > <s12:Header> <wsa:Action> http://schemas.xmlsoap.org/ws/2004/03/mex/Get- Policy/Response </wsa:Action> <wsa:RelatesTo> uuid:73d7edfc-5c3c-49b9-ba46- 2480caee43e9 </wsa:RelayesTo> <wsa:To>http://www.example.com/MyEnd- point</wsa:To> </s12:Header> <s12:Body> <wsx:GetPolicyResponse> </s12:Body> </s12:Envelope> |
Рис. 4. Пример запроса к системе на получение политики относительно сервиса
в WS-MetadataExchange и ее ответа. Адрес сервиса определен через WS-Addresing
Главным из конкретных механизмов, описанных в WS-PolicyAttachment, является привязка к WSDL. Команды привязки включаются в WSDL-описание. Так как стандарт WSDL 1.1 не допускает каких-либо дополнительных XML-элементов внутри описаний типов портов (portType) и сообщений, то WS-PolicyAttachment предлагает расширять эти теги через атрибуты wsp:PolicyURIs и wsp: PolicyRefs. Для того чтобы пользователь такого расширенного описания сервиса понимал, что его структура отличается от той, что диктуется "чистым" стандартом, спецификация предлагает включить элемент <wsp:UsingPolicy/> в секции <wsdl:definitions>, содержащие описания portType и сообщений.
Хранение политик
Реестры UDDI становятся универсальными хранилищами метаданных, и естественно, что WS-PolicyAttachment дает механизмы привязки политик к этим хранилищам. Основа для этого уже прописана в спецификации UDDI: модели tModels предлагают обобщенный механизм для ассоциирования произвольных данных с любыми сущностями (в том числе Web-сервисами), описания которых есть в UDDI-реестре. WS-PolicyAttachment лишь указывает конкретные пути реализации этой возможности.
Рис. 5. Базовый механизм доверительных доменов WS-Federation. Для доступа к ресурсу
клиенту требуется предварительно получить жетон безопасности (1) у IdP в своем домене.
В силу доверия между доменами этот жетон принимается STS в домене ресурса (2).
На его базе STS генерирует для клиента новый жетон, который принимается ресурсом (3)
Первый путь состоит во включении в UDDI-сущности ссылок на уже имеющиеся дистанционно доступные политики через специальную tModel, формат которой задается спецификацией. Второй путь состоит в переоформлении политик в виде самостоятельно разрабатываемых пользователем моделей tModels и регистрации их в реестре так, чтобы затем на них можно было ссылаться из любой UDDI-сущности.
Первый подход разумно применять для политик, уникальных для конкретного Web-сервиса, а второй - для создания более модульных и многократно используемых политик.
Web Services Metadata Exchange (WSMetadataExchange) Статус: авторская спецификация, март 2004.
Авторы: Microsoft, IBM, SAP, BEA Systems.
Эта спецификация призвана упростить получение метаданных о сервисе, связанном с удаленной "конечной точкой". Для этого в ней определено три пары сообщений типа запрос - ответ и WSDL-описания соответствующих сервисов, позволяющие получить следующие три вида метаданных:
- политики WS-Policy, связанные с конечной точкой-получателем или с заданным в запросе пространством имен;
- WSDL-описания, также связанные с конечной точкой-получателем или с заданным в запросе пространством;
- XML-схему для заданного пространства имен.
Вместе эти сообщения создают эффективный механизм для инкрементального получения метаданных о сервисе.
Web Services Federation Language (WS-Federation) Статус: версия 1.0, июль 2003.
Авторы: IBM, Microsoft, BEA Systems, RSA Security, Verisign.
WS-Federation описывает сценарии использования систем, в которых аутентификация производится разными центрами, состоящими в доверительных отношениях, или, иначе говоря, основывается на федеративных принципах. Текущая версия спецификации рассматривает три важных применения стандартов WS-Trust, WS-Security и WS-Policy - обеспечение однократной аутентификации (Single Sign On, SSO), федеративное хранение метаданных (атрибутов пользователей, политик и пр.) и отключение от обслуживания в федеративной среде (Sign-out).
Аутентификация в федеративной среде
WS-Trust и WS-Policy диктуют, что ресурс должен проверить набор утверждений, закодированных в жетоне безопасности поступающего запроса, на соответствие принятой у него политики. Ресурс может потребовать от клиента дополнительных сведений (в виде ЖБ) для подтверждения этих данных, для чего клиенту придется сделать дополнительные запросы к службе аутентификации и подтверждения идентичности (Identity Providers, IdP), в которой имеется запись о нем.
WS-Federation рассматривает возможные последовательности действий (протоколы обмена сообщениями) в таких сценариях, в частности для сред с несколькими аутентификационными центрами. Между такими центрами могут существовать самые разные формы доверительных отношений, не обязательно "один к одному". Например, механизм неявного доверия предполагает наличие сервиса жетонов безопасности (СЖБ, Security Token Service), которому все доверяют и который может своим авторитетом подтвердить право СЖБ выдавать жетоны безопасности, пригодные для аутентификации в СЖБ ресурса. Кроме того, предусматривается механизм посредников, когда один сервис получает доступ к ресурсу от имени другого сервиса. Есть и возможность сделать доверительные отношения между доменами транзитивными: если A доверяет B и C доверяет В, то A будет доверять жетонам, выданным C.
Эти средства делают возможным стандартизовать построение важного частного случая систем аутентификации - систем с однократной аутентификацией клиента.
Атрибуты и псевдонимы
Второй важный набор сценариев, описываемый WS-Federation, затрагивает использование сервиса атрибутов и псевдонимов (САП, Attribute/Pseudonym services). САП не только производит аутентификацию клиента, но и способен расширять ЖБ некоторой дополнительной информацией о клиенте. В спецификации подробно описывается привязка к UDDI как к репозиторию атрибутов - для хранения атрибутов вводится специальная модель tModel.
Что касается псевдонимов, то они применяются для ограничения выдаваемой информации о клиенте (principal) и маскировки (отображения, mapping) его идентичности; в этом случае при доступе к разным ресурсам в жетонах безопасности будут фигурировать разные имена для клиента, что затруднит отслеживание его перемещений между узлами. Согласно WS-Federation, псевдонимы получаются из сервиса псевдонимов командой , а ее поле указывает, к какому домену этот псевдоним нужно применять. Другие поля задают время жизни псевдонима, жетон доказательства обладания секретом и пр. Определяются и команды управления псевдонимами в их хранилище*1.
_____
*1 Соответственно <wsse:SetPseudonym> и <wsse:DeletePseudonym>.
Рис. 6. Применение псевдонимов в WS-Trust. Клиент регистрируется в домене
Business456.com (1) и получает жетон (2), содержащий его первый псевдоним для доступа
к этому домену. Используя этот жетон, он обращается к ресурсу в домене Fabrikam123.com (3),
находящемуся в доверительных отношениях с Business456.com. Ресурс запрашивает у своего сервиса
псевдонимов локальный для себя псевдоним, генерируемый исходя из присланного жетона (4), и получает его (5)
Для обнаружения клиентом разных сервисов псевдонимов и атрибутов применяется механизм WS-Policy/WS-MetadataExchange. Пакет WS-Federation несколько расширяет его, в частности показывает, как сервис в своей политике может указать место получения нужного ЖБ с псевдонимом*1.
_____
*1 Для этого структуры WS-PolicyAssertions расширяются новым утверждением <wsse:RelatedService>.
Наконец, WS-Federation описывает несколько схем отключения от обслуживания в федеративной среде (federated sign-out). Задачей такого процесса является очистка кэшированных данных и ЖБ, которые могут возникнуть в ходе процесса распределенной аутентификации. Спецификация вводит новые SOAP-команды, применяемые при осуществлении подобных действий*1, а совместимые политики при этом могут дополняться новыми конструкциями вроде <wsse:AutoSingOutMessages>, <wsse:RequestSSOMessagesEndpoint>.
_____
*1 <wsse:SingOut>, <RequestSSOMessages>, <CancelSSOMessages>.
Примечание. В пакете WS-federation помимо основной имеются еще и две дополнительные спецификации - WS-Federation: Active Requestor Profile и WS-Federation: Passive Requestor Profile. В них приводятся UML-диаграммы последовательности действий, затрагивающие специфику применения WS-Federation к активным и пассивным клиентам. Активные клиенты - это приложения, способные выдавать и получать SOAP-сообщения, описанные в WS-Security и WS-Trust. Пассивный клиент - это HTTP-браузер или приложение, обеспечивающее широкую поддержку HTTP/1.1. Протоколы аутентификации в данных профилях жестко привязываются к HTTP как транспортному слою - используются операции HTTP/ GET, HTTP/POST и протокол перенаправления запроса, а также куки-файлы. Кроме того, спецификации детально рассматривают вопросы применения жетонов безопасности, формируемых в рамках разных стандартов (Kerberos, X.509), в том числе конкурирующих - вроде SAML.