文章目录关于Kong网关中的JWT身份验证介绍使用JWT介绍JWT身份验证有关添加JWT插件生成consumer JWT credentials以及测试jwt身份验证的其他用法的信息,请参阅文档
在Kong网关中使用JWT认证序言
Kong网关快速入门指南介绍Key验证和HMAC验证方法,并介绍在Kong网关中使用JWT验证。
JT的介绍如下。
jwtintroductionwhatisjwtandwhyshouldyouusejwt简要总结了jwt(JSONwebToken )的特点。
Token本身未编码Base64之前的JSON格式,数据更紧凑,网络传输数据量小,编码解码速度快,前后多种编程语言可以在JSON上支持基于Token的身份验证在Web上,Token使用消息的发送方和接收方都知道的shared secret对HmacSHA进行签名和验证,安全度高,即使泄露到Token也无法解密secret。 Token是有期限的,可以有效降低重放攻击(replay attack )风险的Token本身是可反思的(introspection ),而Resource Server有shared secret则是autoken 在“添加JWT验证JWT插件”服务下添加JWT插件,并保留所有默认值。
查看插件详细信息:
uriparamnames : ` jwt ` keyclaimname : ` ISS ` secretisbase 643360 no # no表示不将secret编码为base64,headers names 333666
将之后生成的jwt证书的密钥设为JWT payload的iss字段(issuer缩写、令牌发行者)。 生成Consumer的jwt凭据将保留所有默认值,并为Consumer生成jwt凭据。
示例:
{ 'tags': null,' secret ' : ' pddcyjzuroauy2hdirrgrng 7i x0 hnf 7b ',' consumer ' : { ' id ' 3: ' c 3202163-}
key是JWT payload中的ISS(Issuer的缩写,表示令牌颁发者。 ) secret是签名时使用的密钥。 ' algorithm': 'HS256 '表示使用HmacSHA256算法。 在Postman上测试新环境变量:
支持JT _ secret : pddcyjzuroauy2hdirrgrng7I x0 hnf 7b- jwt credential的secretjwt _ ISS 33605 D4 z0WB7A8 rxvsfivcez2vlr glf 09 lf - 在horization中,选择Type作为“Bearer Token”,Token的值作为{{jwt_signed}}。
请求的预请求脚本如下:
//jwtgenerationscriptadaptedfrom//https://gist.github.com/CORBA nb/db 03150 abbe 899285 d 6a 86cc 480 f 674 dvarjwtsecret=pm //preparetimestampinsecondsvarcurrenttimestamp=math.floor (date.now ) )/1000 ) vardata={'ISS'3360pm.enviroor ' ist ' 3360 pm.environment.get (jwt _ ist (|',' iat': currentTimestamp, ' exp ' : current timestamp//expirytimeis 30 secondsfromtimeofcreation ' jti ' : ' jwt _ nonce ' } function base64 URL () encodeinclassicalbase 64 encoded source=crypto js.enc.base64.stringify (source )//removepaddingequalcharactersencodededsify '')//replacecharactersaccordingtobase 64 urlspecificationsencodedsource=encoded source.replace ('-' ) ' _ ' ) returnencodedsource(/encodeheadervarstringifiedheader=crypto js.enc.utf8.parse ) JSON.stringify ) he adeer varencodedheader=base64 URL (ST encodedatavarstringifieddata=crypto js.enc.utf8.parse ) JSON.son.sed data varencodeddata=base64 URL (stringifieddata . $ {已编码数据} `/} signtokenvarsignature=crypto js.hmac sha 256 (token,JTsecret(signature=base64URL ) signature
“Exp”:当前时间表30,- 30s有效时间可根据具体情况进行调整,一般不超过几分钟。 请参阅以下内容:
postmanteamcollections -以下是由jwtsignedwithbase 64 encoding生成的jwt令牌的示例:
ey j0 exaioijkv1qilcjhbgcioijiuzi1nij9. ey jp C3 mio ii1rdramhdcn0E4 ul hwc2zpdmnfwjwbfjhr2xgmdlmzisimlzdci6iisimlhdci6mty NJ C2 otm jqdgggcn ezpwfmvho 82g _ ktur _ OJ cer-mkc 30 jybbjbll 4可以将该值复制到https://jwt.io/中以查看解码结果。
示例:
头:
{ 'typ': 'JWT ',' alg': 'HS256'} Payload:
{ ' ISS ' : ' 5d4z0wb7a8rxvsfivcez2vlrgglf 09 lf ',' iat': 1626769351,' exp': 1626769381,
此外,还可以与OpenID Connect JWT协作,将每个用户作为一个Consumer进行更细粒度的JWT认证。
请参阅以下内容:
howtousethekonggatewayjwtpluginforserviceauthenticationkong OpenID connect plugin很遗憾Kongopenidconnectplugin只有kong付费版
参考文献howtousethekonggatewayjwtpluginforserviceauthenticationkongjwtplugin是通过Keycloak API实现OAuth2和OpenID ConnectKong的集成jwt插件Java jwww