Wso2am自定义序列 - 如何记录用户名

时间:2016-06-17 12:15:11

标签: wso2 wso2-am

我在wso2am中创建了一个自定义序列,以便将休息Web服务调用转换为soap调用。

我想拥有进行实际调用的用户的用户名,以便记录它,并在soap正文中使用它。 我尝试访问tenant.id和租户域变量,但不可用。我尝试了END_USER_NAME var,但也是null

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

这样的事情可能吗? 如果没有,是否可以通过authheader推断用户名?

2 个答案:

答案 0 :(得分:1)

我认为您可以在序列中使用上下文属性Get-WindowsFeature | ? DisplayName -like *IIS*

例如

api.ut.userId

答案 1 :(得分:0)

您可以从JWT令牌获取用户名。查看here以启用JWT令牌。然后提取您想要的任何用户声明。我曾解释过, http://lahiruwrites.blogspot.com/2016/06/access-jwt-token-in-mediator-extension.html。  粘贴在下面供您参考(您可以看到如何获得最终用户),

&#13;
&#13;
<?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> 
&#13;
&#13;
&#13;