0

我试图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
4

1 回答 1

0

Web 令牌使用 Base64Url 而不是典型的 Base64。它们基本相同,只是 Base64Url 可以安全地传入 URL,因为它们使用 – 代替 + 和 _ 代替 / 并且它们省略了字符串末尾的 = 填充字符。您可以进行字符串替换以正确转换令牌,然后调用 fromBase64。

错误信息中的 2e 是句号“.”。这不是 Base64 标准字符。这是因为令牌是 JWT,其结构类似于 [Header].[Payload].[Signature] 并且每个部分单独进行 Base64Url 编码。如果要获取所有声明所在的有效负载,则需要将字符串/令牌按句点“.”分割。

另一方面,如果您定义了一个名为 Base64Url 的自定义函数,由于 Mule 4/Dataweave 2 中当前不存在此类函数,您可以构建一个如下所示的 JWT:Base64Url(header) + "." + Base64Url(有效负载)+“。” + Base64Url(签名)

于 2020-01-11T03:18:38.077 回答