我正在尝试从对象存储中获取BASE 64
格式令牌后对其进行解码,但在转换消息中出现错误。
Object Store Retrieval
后的输出。这需要解码。
eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySUQiOiIxNzMzIiwiVXNlck5hbWUiOiJhY2hhbjAzMiIsIkN1bHR1cmVUYWciOm51bGwsImlhdCI6IjE1Njc2Njk3MDgiLCJleHAiOiIxNTY3NzU2MTA4IiwiaXNzIjoiVGltZVNoYXJlV2FyZSIsImF1ZCI6Imh0dHBzOi8vVGltZVNoYXJlV2FyZS5jb20vIn0.w2h6j7gbAs6CouE9WoYEDQRzBYEsNIqry70w2K4JAZg
%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>
我希望得到类似的东西——
{
"alg":"http://www.w3.org/2001/04/xmldsig-more#hmac-sha256",
"typ":"JWT"}{"UserID":"1733",
"UserName":"achan032",
"CultureTag":null,
"iat":"1567669708",
"exp":"1567756108",
"iss":"TimeShareWare",
"aud":"https://TimeShareWare.com/"}0OVA`K
"L6+@f
Web 令牌使用 Base64Url 而不是典型的 Base64。它们基本上相同,除了 Base64Url 可以安全地传入 URL,因为它们使用 – 而不是 + 和 _ 而不是/并且它们省略了字符串末尾的 = 填充字符。您可以执行字符串替换以正确转换令牌,然后调用 fromBase64。
错误消息中的 2e 是一个句点".",它不是 Base64 标准字符。这是因为令牌是 JWT,其结构类似于 [标头]。[有效载荷]。[签名]和每个部分单独Base64Url编码。如果要获取所有声明所在的有效负载,则需要按句点"."拆分字符串/令牌。
另一方面,如果您定义了一个名为 Base64URL 的自定义函数,因为 Mule 4/Dataweave 2 中目前不存在这样的函数,您可以构建如下所示的 JWT:
Base64Url(header( + "." + Base64Url(payload( + "." + Base64Url(signature(