这篇文章将为大家详细讲解有关怎么使用Nginx和左上臂进行JWT校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Lua脚本
这里的秘密我遇到了很大的坑。一开始直接从Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)后端项目中复制了密钥出来,但是一直提示签名不匹配:后来发现后端应用中使用base64解码相关方法,在左上臂脚本中增加了ngx.decode_base64(秘密)处理秘密后解决问题。其实到这里还没有解决问题,在后端调试代码的时候,发现后端密钥被译的结果是一串乱码,为了避免乱码的问题,通过https://www.base64encode.org/重新生成秘密才最终解决了问题。
如果你的项目中也遇到了这个签名不匹配:错误,需要排查一下后端在生成代币的时候,是否有对秘密进行译或者其它处理,在左上臂脚本中也要进行相应的处理。
nignx.conf配置
- nginx-jwt.lua
localcjson=要求“cjson”
localjwt=require'resty.jwt '
-你的秘密
localsecret=' yoursecrethere '
-无需鉴权美国石油学会(美国石油协会)清单
本地no _ need _ token _ API _ list={ '/API/register ','/api/login'}
localhostignore _ URL(val)
forindex,valueinipairs(no _ need _ token _ API _ list)do
如果(值==val),则
返回真
结束
结束
returnfalse
结束
localM={}
functionM.auth()
ifignore _ URL(ngx。var。request _ uri)然后
返回
其他
结束
-required dauthorization request标头
local auth _ header=ngx。var。http _授权
ifauth_header==nilthen
ngx.log(ngx .警告,"无授权标题")
ngx.exit .HTTP_UNAUTHORIZED)
结束
-需要一个人
local_,_,token=string.find(auth_header),”承载%s(.)')
iftoken==nilthen
ngx.log(ngx .错误,"错过了"
ngx.exit .HTTP_UNAUTHORIZED)
结束
- decode_base64和后端保持一致
localjwt _ obj=jwt:验证(ngx。decode _ base64(秘密,令牌)
ifjwt_obj.verified==falsethen
ngx.log(ngx .错误,"无效令牌:".jwt_obj.reason)
ngx.status=ngx .HTTP _ UNAUTHORIZED
ngx.say(cjson.encode(jwt_obj))
ngx。标题。content _ type=' application/JSON;charset=utf-8 '
ngx.exit .HTTP_UNAUTHORIZED)
结束
结束
returnM
Dockerfile配置
worker _ process 1;
事件
{
worker _ connections1024
}
超文本传送协议(超文本传输协议的缩写)
{
Lua _ package _ path '/opt/Lua-resty-jwt/lib/?' lua';
上游后端
{
服务器192 .168 .1 .1:808080
}
access _ log/logs/nginx _ access。日志;
错误日志/log/nginx _ error。日志;
计算机网络服务器
{
列表80;
#后端美国石油学会(美国石油协会)接口代理
位置/api/
{
access_by_lua_block
{
localobj=require('nginx-jwt ')
obj.auth()
}
proxy _ pass http://后端;
proxy _ redirectoff
proxy _ set _ headerHost $主机
proxy _ set _ header rx-Real-IP $ remote _ addr;
proxy _ set _ header rx-forward-For $ proxy _ add _ x _ forward _ For;
}
}
}关于"怎么使用Nginx和左上臂进行JWT校验"这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150321.html