, , ,

Как получить userName из WS-Security soap-заголовка

четверг, 22 января 2009 г. Оставить комментарий

Иногда в BPEL-процессе необходимо знать, какой пользователь вызвал этот web-сервис. Хорошо, когда имя пользователя передается в структуре сообщения, но когда имя пользователя необходимо получить из заголовка soap-сообщенини, то возникают небольшие трудности. Дело осложняется, если сервис защищен, например OWSM, с авторизацией в каком-нибудь LDAP-каталоге. Посмотрим как их можно решить.

Посмотрим на рисунок.



В этом "PipeLine" выполняются шаги по извлечению информации для авторизации "Extract Credentials", аутентификации "Ldap Authenticate" и авторизации "Ldap Authorize".
После выполнения шага "Extract Credentials" из сообщения удаляется информация о пользователе и пароле, поэтому чтобы получить необходимую информацию, добавим шаг "XML Transform", где укажем свою xsl-трансформацию.


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:ns1="http://xmlns.oracle.com/test_soap"
version="1.0" >
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns1:input">
<xsl:element name="{name()}">
<xsl:value-of select="/soap:Envelope/soap:Header/wsse:Security/wsse:UsernameToken/wsse:Username"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Трансформация копирует сообщение один в один за исключением одного элемента "ns1:input", в этом элемент мы копируем имя пользователя.

0 коммент. »

Оставьте Ваш комментарий