我正在尝试解码 Base64 格式的令牌,从 Anypoint Studio 中的对象存储中检索它.帮助解决数据编织错误



我正在尝试从对象存储中获取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(

最新更新