AuthPlatform/src/auth/jwt-auth.lua

59 lines
2.1 KiB
Lua
Raw Normal View History

local jwt = require "resty.jwt"
local validators = require "resty.jwt-validators"
local conf = require("config")
local auth_header = ngx.var.http_Authorization
ngx.log(ngx.INFO, auth_header)
----定义响应数据
local response = {}
----如果请求头中没有令牌则直接返回401
if auth_header == nil or auth_header == "" then
ngx.log(ngx.WARN, "没有找到令牌数据")
response["code"] = ngx.HTTP_UNAUTHORIZED
response["message"] = "没有找到令牌数据"
ngx.status = ngx.HTTP_UNAUTHORIZED
ngx.header.content_type = "application/json; charset=utf-8"
ngx.body = response
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
--[[
--查找令牌中的Bearer前缀字符并进行截取
local _, _, token = string.find(auth_header, "Bearer%s+(.+)")
--如果没有Bearer则表示令牌无效
if token == nil then
response["code"] = ngx.HTTP_UNAUTHORIZED
response["message"] = "令牌格式不正确"
ngx.log(ngx.WARN, "令牌格式不正确")
ngx.status = ngx.HTTP_UNAUTHORIZED
ngx.header.content_type = "application/json; charset=utf-8"
ngx.body = response
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
--]]
--校验令牌
local jwt_obj = jwt:verify(conf.secret_key, auth_header)
--如果校验结果中的verified==false则表示令牌无效
if jwt_obj.verified == false then
ngx.log(ngx.WARN, "Invalid token: ".. jwt_obj.reason)
response["code"] = ngx.HTTP_UNAUTHORIZED
response["message"] = "令牌无效"
ngx.status = ngx.HTTP_UNAUTHORIZED
ngx.header.content_type = "application/json; charset=utf-8"
ngx.body = response
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
--判断token是否超时
if jwt_obj.payload.exp and os.time() > jwt_obj.payload.exp then
ngx.log(ngx.WARN, "token timeout ".. jwt_obj.reason)
response["code"] = ngx.HTTP_UNAUTHORIZED
response["message"] = "令牌已过期"
ngx.status = ngx.HTTP_UNAUTHORIZED
ngx.header.content_type = "application/json; charset=utf-8"
ngx.body = response
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
--全部校验完成后,说明令牌有效,返回令牌数据
ngx.log(ngx.INFO, "令牌校验通过 JWT: " .. cjson.encode(jwt_obj))