我尝试使用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不存在。我在做什么错了?
答案 0 :(得分:1)
根据我的研究,如果您使用HS256签名算法,则必须在策略内以base64编码形式内联提供密钥。换句话说,我们必须将密钥编码为base64字符串。有关更多详细信息,请参阅document
我的测试步骤如下
答案 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。
我将其更改为从现在开始的一个月,并且一切正常。