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");

}

}

开始使用

  1. 使用Konga创建service ,指向本地开启的user-service:http://192.168.1.27:8080/users

  1. 为第一步的service创建routes,path 为/user-api

  1. 创建一个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。

  1. 使用https://jwt.io/ 生成一个jwt token,手动在payload里面加上 自定义的key claim name 字段client_id =dev-client,如下图:

  1. 创建一个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

回到顶部