How to check error when validating jwt token using validate-jwt(以前:How to use a custom built jwt in validate-jwt?)

How to check error when validating jwt token using validate-jwt (Previously: How to use a custom built jwt in validate-jwt?)

我尝试使用 validate-jwt 策略使用 JWT 令牌限制对 REST API 的访问。以前从来没有这样做过。

这是我的入站政策(取自简单令牌验证 here):

<validate-jwt header-name="Authorization" require-scheme="Bearer">
    <issuer-signing-keys>
        <key>{{jwt-signing-key}}</key>
    </issuer-signing-keys>
    <audiences>
        <audience>CustomerNameNotDns</audience>
    </audiences>
    <issuers>
        <issuer>MyCompanyNameNotDns</issuer>
    </issuers>
</validate-jwt>

使用 this generator 我创建了一个声明(我不确定我是否正确理解发行者和受众):

{
    "iss": "MyCompanyNameNotDns",
    "iat": 1572360380,
    "exp": 2361278784,
    "aud": "CustomerNameNotDns",
    "sub": "Auth"
}

签名 JSON Web 令牌 部分中,我从组合框中选择了 生成 64 位密钥。我将生成的密钥放在 {{jwt-signing-key}}.

的位置

现在,我正在尝试使用 Postman 调用 API。我添加了一个 "Authorization" header,作为我输入的值 "Bearer {{ JWT created by the linked generator }}".

我收到 401,JWT 不存在。我做错了什么?

根据我的研究,如果您使用 HS256 签名算法,则必须以 base64 编码形式在策略中内联提供密钥。换句话说,我们必须将密钥编码为 base64 字符串。更多详情,请参考document

我的测试步骤如下

  1. 创建 Jwt 令牌

  2. 测试 一种。如果我直接在策略中提供密钥,我会收到 401 错误

b。如果我在策略中将密钥编码为 base64 字符串,我可以调用 api

将密钥编码为策略中的 base64 字符串使我能够做到这一点:-)

我将 Ocp-Apim-Trace 参数设置为 true 以便更仔细地调试它。我按照 ocp-apim-trace-location 下的响应中提供的 link 进行操作,在 "on error" 部分中我发现了以下消息:

JWT Validation Failed: IDX10225: Lifetime validation failed. The token is missing an Expiration Time. Tokentype: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'..

这很有趣,因为我已将过期时间...设置为 2099。

我把它改为一个月后,效果很好。