我在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推断用户名?
答案 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。 粘贴在下面供您参考(您可以看到如何获得最终用户),
<?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;