在使用validate-jwt验证jwt令牌时如何检查错误(以前:如何在validate-jwt中使用定制的jwt?)

时间:2019-10-29 15:09:12

标签: azure jwt azure-api-management

我尝试使用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"
}

Signed JSON Web令牌部分中,我从组合框中选择了 Generate 64-bit key (生成64位密钥)。我将生成的密钥替换为 {{jwt-signing-key}}

现在,我正在尝试使用Postman调用API。我添加了“授权”标头,并在值中添加了“ Bearer {{由linked generator}}创建的JWT”。

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

2 个答案:

答案 0 :(得分:1)

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

我的测试步骤如下

  1. 创建Jwt令牌 enter image description here enter image description here

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

enter image description here

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

答案 1 :(得分:0)

Jim Xu's answer在策略中将密钥编码为base64字符串,这使我可以走了这么远:-)

我将 Ocp-Apim-Trace 参数设置为true,以便对其进行更仔细的调试。我按照响应中 ocp-apim-trace-location 下提供的链接,在“出错时”部分中找到了以下消息:

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

这很有趣,因为我将“到期时间...”设置为2099。

我将其更改为从现在开始的一个月,并且一切正常。