如何将Django微服务生成的JWT密钥对接Kong网关JWT插件做权限校验
Kong网关对接现有Django JWT实现身份校验的方案说明
1. 能否直接共享Django的JWT密钥给Kong JWT插件
完全可以,只要你的Django认证服务是遵循标准JWT规范签发令牌即可。
需要注意以下适配要求:
- 确保Kong JWT插件配置的加密算法,和Django签发JWT所用的算法完全一致,HS256/HS512等对称算法、RS256/ES256等非对称算法均支持
- 若使用非对称加密,只需给Kong提供Django的JWT公钥即可,无需同步私钥,安全性更高
- 如果Django的JWT签名密钥做了Base64编码,需要在Kong插件配置中开启
secret_is_base64参数
2. 是否需要为每一位用户单独创建Kong Consumer
可根据你的业务需求判断,分为两种场景:
- 无需创建:如果你的需求仅为校验JWT合法性(签名正确、未过期、签发方匹配),不需要用到Kong基于Consumer实现的细粒度能力(用户级限流、用户级路由、ACL权限控制、用户维度流量统计等),完全不需要为每个用户创建Kong Consumer。新版Kong JWT插件支持仅校验令牌合法性,无需关联Consumer实体,适合用户量级大的业务场景,避免冗余数据同步。
- 需要创建:如果需要用到上述Kong原生的Consumer关联能力,才需要创建对应的Consumer实体,且不需要提前全量同步所有用户,可在用户首次携带有效JWT请求时,通过自定义的Kong前置插件异步同步创建即可。
3. 具体实现步骤
- 第一步:提取Django JWT的配置参数:确认签发算法、签名密钥(对称加密)/公钥(非对称加密)、签发人
iss、受众aud等可选校验字段。 - 第二步:在需要拦截的Kong服务/路由上启用JWT插件:
- 无需绑定Consumer的配置:填写上一步拿到的密钥/公钥,配置
algorithms为对应加密算法,可按需开启iss/aud等字段的校验规则,无需额外配置Consumer关联参数即可完成基础身份校验,非法请求会默认返回401状态码。 - 需要绑定Consumer的配置:先创建对应用户的Consumer实体,给每个Consumer关联JWT凭证,凭证的
key字段填JWT Payload中的唯一用户标识(比如user_id),secret字段填统一的Django JWT签名密钥即可,无需为每个用户单独生成密钥。
- 无需绑定Consumer的配置:填写上一步拿到的密钥/公钥,配置
- 第三步:配置扩展规则:如果需要做网关层权限校验,可配合Kong的ACL插件,基于JWT透传的用户角色字段做接口权限拦截;也可以通过Request Transformer插件将用户ID、角色等JWT Payload字段透传给后端服务,无需后端再重复解析JWT。
- 第四步:测试验证:分别用未携带JWT、过期JWT、非法签名JWT、合法JWT的请求访问接口,确认拦截逻辑符合预期。
内容的提问来源于stack exchange,提问作者Abadlia Ramy
相关产品推荐
相关产品推荐

