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'), '@')" />
我在 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'), '@')" />