在Azure APIM策略中验证JWT

时间:2020-07-08 23:44:47

标签: azure azure-api-management

在Azure APIM中,我试图创建一个将验证JWT的策略。无论我尝试什么,我总是会收到“ 401:Invalid 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."
}

2 个答案:

答案 0 :(得分:4)

问题是我的密钥太小了。

在Azure中测试API时,有一个“跟踪”选项卡,但缺少“出错时”部分。

enter image description here

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

事实证明,我使用的密钥大小太小。它只有24个,至少需要128个。 enter image description here

答案 1 :(得分:-1)

您提供的令牌为无效签名。首先转到jwt.io检查您的令牌。

您提供的政策正确。有关更多详细信息,请参阅此article