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

Wso2am custom sequence - how to log username

我在 wso2am 中创建了一个自定义序列,以便将 rest 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 推断用户名?

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

<?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> 

我认为您可以在序列中使用上下文 属性 api.ut.userId

例如

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