【问题标题】:Validate JWT in Azure APIM policy在 Azure APIM 策略中验证 JWT
【发布时间】:2020-10-29 11:34:30
【问题描述】:

在 Azure APIM 中,我正在尝试创建一个将验证 JWT 的策略。无论我尝试什么,我总是收到“401:无效的 JWT”错误。有谁知道我做错了什么? (也许我没有使用正确的签名密钥?)

我的 base64 编码安全密钥是 Zm9v。

我在 jwt.io 创建了示例令牌,因此我的 Authorization 标头是:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Bm8tu4m18oA96xwhBL8AV_4hRpIU6OrK5UaOmGqBEsk

这是我正在使用的政策:

<policies>
    <inbound>
        <base />
        <validate-jwt
            header-name="Authorization"
            require-expiration-time="false"
            require-scheme="Bearer"
        >
            <issuer-signing-keys>
                <key>Zm9v</key>
            </issuer-signing-keys>
        </validate-jwt>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

HTTP 响应:

cache-control: private
content-length: 48
content-type: application/json
ocp-apim-trace-location: https://xxxxxxx
vary: Origin
{
    "statusCode": 401,
    "message": "Invalid JWT."
}

【问题讨论】:

  • 详细错误信息是什么?
  • 我将 HTTP 响应添加为问题。

标签: azure azure-api-management


【解决方案1】:

您提供的令牌是无效签名。先去jwt.io查看你的token。

您提供的政策是正确的。更多详情可以参考这个article。

【讨论】:

  • 似乎有效。我将“Zm9v”粘贴到秘密文本框中,选中“秘密 base64 编码”复选框,然后将 JWT 粘贴到令牌文本框中。它说“签名已验证”。
【解决方案2】:

问题是我的密钥太小了。

在 Azure 中测试 API 时,有一个 Trace 选项卡,但缺少 On Error 部分。

您必须转到“消息”选项卡。有一个 ocp-apim-trace-location 将显示完整的跟踪。

原来我使用的密钥尺寸太小了。它只有 24 岁,至少需要 128 岁。

【讨论】:

  • 这对我真的很有帮助!我虽然那个“无效的 jwt”是我会得到的唯一错误,而且它是无望的!
猜你喜欢
  • 2021-03-21
  • 2020-12-21
  • 1970-01-01
  • 2020-01-02
  • 2023-01-12
  • 2017-08-28
  • 2018-12-18
  • 2022-06-18
  • 1970-01-01
相关资源
最近更新 更多