如何使用 validate-jwt 验证 jwt 令牌时检查错误(之前:如何在 validate-jwt 中使用自定义构建的 jwt?)

问题描述 投票:0回答:3

我尝试使用

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

这是我的入站策略(取自简单令牌验证此处):

<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>

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

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

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

现在,我尝试使用 Postman 调用 API。我添加了一个“授权”标头,并将“承载 {{ JWT 由 linked 生成器 }} 创建”作为值。

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

azure jwt azure-api-management
3个回答
2
投票

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

我的测试步骤如下

  1. 创建 Jwt 令牌

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

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


0
投票

Jim Xu 的回答将密钥编码为策略中的 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。

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


0
投票

您可以使用此网站https://www.base64encode.org/,而不是使用“Convert.ToBase64String(Encoding.UTF8.GetBytes(”),并将您的令牌密钥转换为 Base64 字符串,并将其直接作为密钥API 管理。

它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.