NGINX实现JWT权限认证

691 阅读1分钟

无需后端接口,只用nginx就可以实现token验证,实现资源的授权访问

  1. 安装jwt模块ngx_http_auth_jwt_module

安装此模块需要源文件编译安装,如果已经通过包管理工具apt-get、yum等安装了nginx,建议先卸载

下载nginx源文件(选择较高版本) wget http://nginx.org/download/nginx-1.26.2.tar.gz

下载jwt模块源文件 git clone https://github.com/tizpuppi/ngx_http_auth_jwt_module

进入nginx源文件目录,执行下面命令添加模块,其他配置自行添加

./configure --with-http_ssl_module --add-module=../ngx_http_auth_jwt_module

编译安装 make && make install

如果执行过程遇到缺少某些库,自行安装

  1. 修改nginx配置文件

上实例解释,下面配置是给autoindex的资源添加认证

location /log {
    try_files $uri $uri/ =404;
    autoindex on;
    autoindex_format json; #我需要在别的网站展示文件目录,供浏览和下载,转化为json给前端对接
    auth_jwt "Protected resource"; #开启jwt认证
    auth_jwt_key_file auth/jwt.key; #jwt秘钥文件
    auth_jwt_alg HS256; #jwt加密算法类型
}

使用对称加密方式,秘钥文件中仅需要写上秘钥即可,如果是非对称加密,秘钥文件可能需要json格式,没有实测。

最后,实际访问资源时需要在请求Header中加上'Authorization: Bearer <jwt>',这是默认方式,完全够用,如果想换别的字段或者用cookie,自行研究。我有空再补充