我正在从对象存储中获取BASE 64
格式令牌,但在转换消息中出错时尝试将其解码。
[C0之后的输出。这需要解码。
eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySUQiOiIxNzMzIiwiVXNlck5hbWUiOiJhY2hhbjAzMiIsIkN1bHR1cmVUYWciOm51bGwsImlhdCI6IjE1Njc2Njk3MDgiLCJleHAiOiIxNTY3NzU2MTA4IiwiaXNzIjoiVGltZVNoYXJlV2FyZSIsImF1ZCI6Imh0dHBzOi8vVGltZVNoYXJlV2FyZS5jb20vIn0.w2h6j7gbAs6CouE9WoYEDQRzBYEsNIqry70w2K4JAZg
Object Store Retrieval
错误消息:
%dw 2.0
import * from dw::core::Binaries
output application/octet-stream
---
fromBase64(payload as String) as Binary
我希望得到类似的东西-
Message : "Illegal base64 character 2e
5| fromBase64(payload as String) as Binary
^^^^^^^^^^^^^^^^^
Trace:
at fromBase64 (line: 5, column: 12)
at main (line: 5, column: 1)" evaluating expression: "%dw 2.0
import * from dw::core::Binaries
output application/octet-stream
---
fromBase64(payload as String) as Binary".
Error type : MULE:EXPRESSION
Element : authenticationflowtswFlow/processors/3 @ authenticationflowtsw:authenticationflowtsw.xml:30 (Transform Message)
Element XML : <ee:transform doc:name="Transform Message" doc:id="0cf3e737-e6a1-4d67-9a7c-60017db4ccf9">
<ee:message>
<ee:set-payload>%dw 2.0
import * from dw::core::Binaries
output application/octet-stream
---
fromBase64(payload as String) as Binary</ee:set-payload>
</ee:message>
</ee:transform>
Web令牌使用Base64Url而不是典型的Base64。它们基本相同,不同之处在于Base64Url可以安全地传入URL,因为它们使用–而不是+和_而不是/,并且在字符串末尾省略了=填充字符。您可以执行字符串替换以正确转换令牌,然后从Base64调用。
错误消息中的2e是句点“。”不是Base64标准字符。这是因为令牌是JWT,其结构类似于[Header]。[Payload]。[Signature],并且每个部分都分别经过Base64Url编码。如果要获取所有声明都位于的有效负载,则需要将字符串/令牌除以句点“。”。]
另一方面,如果您定义了一个名为Base64Url的自定义函数,由于Mule 4 / Dataweave 2当前不存在这样的函数,因此可以像下面这样构建一个JWT:Base64Url(header)+“。 + Base64Url(有效载荷)+“。 + Base64Url(签名)