【问题标题】: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 令牌时如何检查错误(上一篇:如何在 validate-jwt 中使用自定义构建的 jwt?)
【发布时间】:2020-02-24 20:34:03
【问题描述】:

我尝试使用 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 Token部分,我从组合框中选择了Generate 64-bit key。我将生成的密钥放在 {{jwt-signing-key}} 的位置。

现在,我正在尝试使用 Postman 调用 API。我添加了一个“Authorization”标头,并将“Bearer {{ JWT created by the linked generator }}”作为值。

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

【问题讨论】:

    标签: azure jwt azure-api-management


    【解决方案1】:

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

    我的测试步骤如下

    1. 创建 Jwt 令牌

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

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

    【讨论】:

    • 我按照您的建议使用 Convert.ToBase64String(Encoding.UTF8.GetBytes( 转换了字符串,但我仍然收到带有消息 Invalid JWT401 Unauthorized。在 Azure 门户中查看跟踪部分时,我在 validate-jwt 下了解到 @987654339 @.
    • 您是否提供了订阅密钥?
    • 我关闭了此 API 的订阅密钥。
    • 如果不加策略,可以调用api吗?
    • 是的,如果没有 validate-jwt 策略,API 工作得很好。
    【解决方案2】:

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

    这很有趣,因为我已将 Expiration Time... 设置为 2099。

    我把它改成从现在开始的一个月,它工作得很好。

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2018-10-16
      • 2016-08-31
      • 1970-01-01
      • 2023-01-23
      • 2020-03-07
      • 2018-11-25
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多