从 Mule 自定义策略中的基本身份验证中提取用户名

问题描述 投票:0回答:1

要求是根据端点/资源限制 clientId。我参考了 Mule4 的这篇文章

https://help.mulesoft.com/s/article/Custom-Policy-Example-Limit-Client-IDs-Access-to-Specific-Endpoints-Mule-4

文章演示了如何从标头中获取

clientId
,即
attributes.headers['client_id']
,正如在我的请求中,我们将 clientId 作为基本身份验证中
userName
的一部分传递。理想情况下需要提取
userName
。实际上,当它执行时,值会以 Base64 编码形式传递。我知道如何使用 dwl 提取

 %dw 2.0
  output application/java
  import * from dw::core::Strings
  import * from dw::core::Binaries
  ---
  substringBefore(fromBase64(substringAfter(attributes.headers.authorization default "","Basic ")),":")

我正在尝试适应自定义策略来提取用户名进行验证,就像上面在 dwl 中提到的那样。没有取得任何成功。

还参考了Mulesoft的这篇文章,它说明了如何从header、payload、quaryParam中提取客户端Id,当涉及到

Obtaining Credentials using Basic Authorization header
时,它跳过了表达式字段。

https://docs.mulesoft.com/api-manager/2.x/client-id-based-policies

如何通过Mule自定义策略方式从Basic Auth中提取用户名?

任何想法将不胜感激。谢谢

如果我的问题不清楚,请告诉他们。 使用Mule4.4。

编辑以提供更多详细信息:

参考如下政策

  <http-policy:proxy name="{{{policyId}}}-custom-policy">
    <http-policy:source>
        <try>
              <choice  >
                {{#clientIDs}}
                  <when expression="#[&#39;{{{.}}}&#39;=={{{clientIdExpression}}}]">
                    <logger level="INFO" message="Route Found"/>
                  </when>

其中

{{{clientIdExpression}}}
是从 YAML 值中选取的
attributes.headers['client_id']

所以我用 dwl 表达式替换了上面的选择表达式

#[&#39;{{{.}}}&#39;=={{{clientIdExpression}}}]
,以从 auth 获取用户名并进行比较

  <http-policy:proxy name="{{{policyId}}}-custom-policy">
    <http-policy:source>
        <try>
              <choice  >
                {{#clientIDs}}
                  <when expression="#[%dw 2.0
output application/java
import * from dw::core::Strings
import * from dw::core::Binaries
var extractClientID =    substringBefore
 (fromBase64(substringAfter(attributes.headers.authorization default "","Basic ")),":")
---
if ('{{{.}}}' == extractClientID) true else false ">
                    <logger level="INFO" message="Route Found"/>
                  </when>

它给我加载错误

c:/... Element type "when" must be followed by either attribute specifications, ">" or "/>". at org.mule.runtime.core.api.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:56) at org.mule.runtime.core.api.config.builders.AbstractResourceConfigurationBuilder.configure(AbstractResourceConfigurationBuilder.java:84)

您知道如何在自定义策略中使用 dataweave 吗?注释开始和结束标记的含义? 任何帮助将不胜感激。

mule dataweave mulesoft mule4
1个回答
0
投票

您的when表达式字符串中有一个拼写错误。

表达式字符串有一个需要关闭的方括号 -

© www.soinside.com 2019 - 2024. All rights reserved.