kong使用jwt插件
阅读本文建立在能搭建kong运行环境,熟悉简单插件的使用,熟悉konga UI管理页面或admin api,熟悉jwt token基础之上。本文重点阐释让人疑惑的key claim name参数。
插件的作用
可以从url param,header,cookie中获取token,并且验证签名有效,如果有效,Kong将把请求代理到上游服务,如果没有找到token或验证失败则丢弃请求。
环境准备
- Kong相关环境
- Konga
- https://jwt.io/
- 测试服务user-service
@RequestMapping("/users")@RestController
@Slf4j
public class UserController {
@GetMapping
public ResponseEntity<String> hello() {
return ResponseEntity.ok("hello users service");
}
}
开始使用
- 使用Konga创建service ,指向本地开启的user-service:http://192.168.1.27:8080/users
- 为第一步的service创建routes,path 为/user-api
- 创建一个jwt插件,其中
uri param names, cookie names,header names
是http请求不同位置放置token的参数名称,一般是放在header中。注意key claim name
参数,这里默认值是iss,也就是jwt官方字段iss (issuer)签发人,这个参数必填,是jwt原始数据中的key name,作用是,当使用后面配置的consumer 公钥解析出来jwt的元数据后,要验证的字段,这里自己改写为client_id。
- 使用https://jwt.io/ 生成一个jwt token,手动在payload里面加上 自定义的key claim name 字段client_id =dev-client,如下图:
- 创建一个consumer,创建你的jwt credentials,注意,前三项必填。看到第4步中的页面,将数据依次填入,key为我们自定义的client_id的值,加密算法为 生成jwt的 header的 alg:RS256,rsa_public_key为public key 。
也就是说这里的key字段的值就是第3步中key claim name 要校验的值,如果这里采用默认的iss,默认生成该值,则jwt的payload中必须要有iss=自己填写或默认产生的值。
测试
- 直接请求http://localhost:8000/user-api 返回
{ "message": "Unauthorized" }
- 添加access_token参数,复制第4步中生成的token,请求成功。
以上是 kong使用jwt插件 的全部内容, 来源链接: utcz.com/z/512281.html