在 Azure APIM 策略中验证 JWT

use*_*978 0 azure azure-api-management

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

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

我在 jwt.io 创建示例令牌,所以我的授权标头是:

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Bm8tu4m18oA96xwhBL8AV_4hRpIU6OrK5UaOmGqBEsk
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的政策:

<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>
Run Code Online (Sandbox Code Playgroud)

HTTP响应:

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

use*_*978 5

问题是我的钥匙尺寸太小了。

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

在此处输入图片说明

您必须转到“消息”选项卡。有一个ocp-apim-trace-location将显示完整的跟踪。 在此处输入图片说明

事实证明我使用的密钥大小太小了。它只有 24,并且必须至少为 128。 在此处输入图片说明