2016-06-17 1 views
0

Я создал пользовательскую последовательность в wso2am, чтобы преобразовать вызов веб-службы отдыха, в вызов мыла.Пользовательская последовательность Wso2am - как зарегистрировать имя пользователя

Я бы хотел, чтобы у пользователя было имя пользователя, которое делает фактический звонок, чтобы его зарегистрировать и использовать в теле мыла. Я попытался получить доступ к переменным домена tenant.id и арендатора, но они недоступны. Я попробовал END_USER_NAME var, но это также было нулевым

<property name="domain" expression="$ctx:tenant.info.domain" /> 
<property name="user" expression="substring-before(get-property('END_USER_NAME'), '@')" /> 

Возможно ли это? Если нет, можно ли вывести имя пользователя с помощью authheader?

ответ

1

Я думаю, что вы можете использовать свойство контекста api.ut.userId в вашей последовательности.

Например

<property name="user" expression="substring-before(get-property('api.ut.userId'), '@')" /> 
+0

Работал как шарм! – Spiros

0

Вы можете получить имя пользователя из токена JWT. Посмотрите here для включения токена JWT. Затем извлеките любой пользовательский запрос youwant. Я объяснил это, http://lahiruwrites.blogspot.com/2016/06/access-jwt-token-in-mediator-extension.html. Оклейка ниже для справки (Вы можете увидеть, как получить Enduser),

<?xml version="1.0" encoding="UTF-8"?> 
 
<sequence 
 
    xmlns="http://ws.apache.org/ns/synapse" name="Test:v1.0.0--In"> 
 
    <log level="custom"> 
 
     <property name="--TRACE-- " value="API Mediation Extension"/> 
 
    </log> 
 
    <property name="authheader" expression="get-property('transport','X-JWT-Assertion')"></property> 
 
    <script language="js"> var temp_auth = mc.getProperty('authheader').trim();var val = new Array();val= temp_auth.split("\\."); var auth=val[1];var jsonStr = Packages.java.lang.String(Packages.org.apache.axiom.om.util.Base64.decode(auth), "UTF-8"); var tempStr = new Array();tempStr= jsonStr.split('http://wso2.org/claims/enduser\":\"'); var decoded = new Array();decoded = tempStr[1].split("\"");mc.setProperty("enduser",decoded[0]); </script> 
 
    <log level="custom"> 
 
     <property name=" Enduser " expression="get-property('enduser')"/> 
 
    </log> 
 
</sequence>

+1

Havent пробовал, но, кажется, законны В случае мне понадобится больше, чем просто имя пользователя, я буду использовать JWT маркер. – Spiros

+0

Lovely little 'gotcha', который я не думаю, что я видел документально .. если вы используете язык сценария (javascript наверняка) .. тогда ваш максимальный размер сообщения ограничен 64k, просто что-то, чтобы проверить – Brian