您可以尝试将以下序列实现为 API 的顺序。以下序列使用 Synapse 属性检索最终用户 ID 并将其分配给Authorization
标题。
<?xml version="1.0" encoding="UTF-8"?><sequence xmlns="http://ws.apache.org/ns/synapse" name="username-header">
<property name="userid" expression="$ctx:api.ut.userName"/>
<!-- property name="userid" expression="$ctx:api.ut.userId"/ -->
<log level="custom">
<property name="User ID" expression="$ctx:userid" />
</log>
<property name="Authorization" expression="$ctx:userid" scope="transport" action="set" />
</sequence>
此外,如果以上不满足您的要求,您还可以尝试使用以下 Synapse 属性。
api.ut.username
api.ut.userId
如果您尝试从 API 管理器在 API 调用期间生成的后端 JWT 令牌中读取最终用户的 ID,则需要提出扩展的中介序列,读取和解码令牌,然后提取信息。如果要求如上所述,下面给出的是一个样本(不完整)
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="admin--AssertionAPI:v1.0.0--In">
<property name="assertion" expression="$trp:X-JWT-Assertion" />
<log level="custom">
<property name="Assertion" expression="$trp:X-JWT-Assertion" />
</log>
<property name="Body" expression="base64Decode(fn:substring-before(fn:substring-after($ctx:assertion, '.'), '.'))" />
<log level="custom">
<property name="body" expression="$ctx:Body" />
</log>
<!-- use script mediator to access required properties -->
<!-- and set the value as a header -->
</sequence>