Azure API Management(6)Validate JWT Token

本文是APIM系列的一部分,完整内容参见:

  1. (视频)Azure API Management(1)创建Azure APIM并添加后端API
  2. (视频)Azure API Management(2)创建 Product/User/Subscription/体验Developer Portal
  3. (视频)Azure API Management(3)体验APIM Policy-流控/隐藏后端api url/修改response header
  4. (视频)Azure API Management(4)体验APIM 版本管理
  5. (视频)Azure API Management(5)缓存
  6. (视频)Azure API Management(6)Validate JWT Token

 


 

本文介绍如何在APIM层对jwt token进行验证

 

视频介绍:

https://www.51azure.cloud/post/2020/8/14/azure-api-management-6-validate-jwt-token

 


图文介绍:

 

JWT介绍:

JWT token是目前使用非常广泛的一种token形式,本文介绍如何在apim中对jwt token进行验证,关于jwt token的具体构成不是本文重点,可参考如下链接进行学习:

https://www.cnblogs.com/lori/p/11246611.html?utm_source=tuicool&utm_medium=referral

https://jwt.io/

 


 
在APIM中添加validate-jwt policy:

 

在APIM中验证jwt token也是通过policy实现的,具体方法如下:

添加policy,选择 validate JWT

本例中配置如下:

我们仅针对本例配置的内容进行解释,关于该页面的详细解释,请参照官网:

https://docs.microsoft.com/zh-cn/azure/api-management/api-management-access-restriction-policies#ValidateJWT

1)验证的JWT 位于Header中,也可以选择其他两个选项;

2)验证的JWT 在header中的key为“Authorization”

3)不验证JWT过期时间,如果为TRUE,则必须保证JWT 的Payload中包含“exp”(token过期时间),⚠️,通常情况下,实际业务的JWT基本都包含exp以验证token是否过期,本例中为了演示效果,不检查exp过期时间

4)同样为了演示,本例不进行签名检查

5)Issue signing keys 表示用来签名的key的base64格式,如果有多个key,则添加多个即可,注意,validate-jwt用我们在这里提交的key进行JWT签名的解析,如果这里的key 和用户通过http request 提交的JWT里的签名部分不匹配,则验证JWT失败,返回401

本例中使用的key为“your-256-bit-secret”,base64加密后添加到下图5)处:

base64加解密可自行通过代码实现,或通过如下网址测试:http://tool.chinaz.com/Tools/Base64.aspx

 

其他注意事项:

validate-jwt 策略要求 exp 注册声明包括在 JWT 令牌中,除非 require-expiration-time 属性已指定并设置为 false。 validate-jwt 策略支持 HS256 和 RS256 签名算法。 对于 HS256,必须采用内联方式在策略中以 base64 编码形式提供密钥。 对于 RS256,必须通过 Open ID 配置终结点提供密钥。 validate-jwt 策略通过加密算法 A128CBC-HS256、A192CBC-HS384、A256CBC-HS512 支持使用对称密钥加密的令牌。

 

 


 
在jwt.io上生成一个 JWT用来做测试:

 

1) alg选择 hs256方式,如果为rs256,则必须在validate-jwt中配置open id

2)signature中的key使用的是默认值“your-256-bit-secret”,如果在测试过程中,你变更了这个值,则需要将变更后的值base64加密后添加到validate-jwt的 Issue signing keys中(上图5)处)

 

 

 

 


 
 
在Postman中测试结果:

在Header中增加“Authorization”,Value为“Bearer”+ 空格+ JWT Token:

如下图成功取到了数据

 

修改Header中的 Authorization的value,即变更JWT的任意字符或者 在Validate-JWT的 Policy中变更Issue Signing Keys的值,都会导致签名验证失败,从而返回401错误:

如下图去掉了JWT末尾的一个字符,则返回401

 





声明:

 

点击可查阅本站文章目录 《文章分类目录》

本站所有内容仅代表个人观点,如与官文档冲突,请以官方文档为准。

可在本页面下方留言或通过下方联系方式联系我:

微信:wxyusz;邮箱:shuzhen.yu@foxmail.com

欢迎关注公众号“云计算实战”,接收最新文章推送。

posted @ 2020-08-17 08:48  shuzhen.yu  阅读(296)  评论(0编辑  收藏  举报