欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Kong JWT插件的身份验证步骤详解

最编程 2024-07-28 11:02:06
...

认证过程
  1. 如果配置中允许OPTIONS请求,并且请求的方法确实是OPTIONS,放行。
  2. 如果配置中设置了匿名消费者,并且有凭证,放行。这里是为了实现多重认证,通过配置匿名消费者来实现逻辑或的认证,此时必须有其他认证插件,当其他认证插件通过,jwt插件就不再验证,若不设置匿名,则既要jwt验证也要其他认证插件验证。
  3. 先后从query params,request header中查找token(根据配置的变量),token的格式为\\s*[Bb]earer\\s+(.+),如果从query params找到就返回了,不会再根据request header找。
  4. 如果没有找到token,或者token格式不对,并且不允许匿名,返回401。
  5. 如果没有找到token,并且允许匿名,根据配置的匿名的id查询消费者,增加request header:X-Consumer-IDX-Consumer-UsernameX-Anonymous-Consumer=true,id是自动生成的,username是配置时填写的,设置这个消费者的凭证是nil,放行。
  6. 如果找到token,且格式合法,jwt解码这个token,验证token的 claim,消费者,签名验证,过期验证,全部通过后,同匿名一样,增加步骤5中的request header,并且清除X-Anonymous-Consumer这个header。

认证失败说明

response status全部为401,response body只需要区分过期和强制失效,来实现业务处理,其他情况归为未知异常处理。

http status

401

http response body

1. jwt没有包含必要的声明(字段名称被修改了)

  • 缺少user_name

    Invalid user_name in claims
    
  • 缺少jti

    Invalid jti in claims
    

2.jwt签名无效(数据被篡改了)

{
    "message": "Bad token; invalid signature"
}

3.jwt已过期

{
    "exp": "token expired"
}

4.被强制失效

{"msg":"账号已在别处登录","state":1001}