PrefaceBecause it does not involve dependencies on databases and other resources, jwt itself is also stateless. Therefore, the authentication service is no longer based on Java or other languages. Instead, we use the Lua script to enhance nginx: we use the Lua script to verify whether the token is valid. If it is invalid, we return 401 directly. If it is valid, we forward it as is. Lua Script I encountered a big pit with the secret here. At first, I copied the key directly from the Java backend project, but it kept prompting nignx.conf configuration--nginx-jwt.lua local cjson = require "cjson" local jwt = require "resty.jwt" --your secret local secret = "yoursecrethere" --No authentication required API list local no_need_token_api_list = {'/api/register', '/api/login'} local function ignore_url (val) for index, value in ipairs(no_need_token_api_list) do if (value == val) then return true end end return false end local M = {} function M.auth() if ignore_url(ngx.var.request_uri) then return else end -- require Authorization request header local auth_header = ngx.var.http_Authorization if auth_header == nil then ngx.log(ngx.WARN, "No Authorization header") ngx.exit(ngx.HTTP_UNAUTHORIZED) end --require Bearer token local _, _, token = string.find(auth_header, "Bearer%s+(.+)") if token == nil then ngx.log(ngx.ERR, "Missing token") ngx.exit(ngx.HTTP_UNAUTHORIZED) end --decode_base64 is consistent with the backend local jwt_obj = jwt:verify(ngx.decode_base64(secret), token) if jwt_obj.verified == false then ngx.log(ngx.ERR, "Invalid token: ".. jwt_obj.reason) ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say(cjson.encode(jwt_obj)) ngx.header.content_type = "application/json; charset=utf-8" ngx.exit(ngx.HTTP_UNAUTHORIZED) end end return M Dockerfile configurationworker_processes 1; events { worker_connections 1024; } http { lua_package_path "/opt/lua-resty-jwt/lib/?.lua;;"; upstream backend { server 192.168.1.1:8080; } access_log /logs/nginx_access.log; error_log /logs/nginx_error.log; server { listen 80; #Backend api interface proxy location /api/ { access_by_lua_block { local obj = require('nginx-jwt') obj.auth() } proxy_pass http://backend; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } This is the end of this article about using Nginx and Lua for JWT verification. For more information about Nginx and Lua for JWT verification, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Detailed explanation of small state management based on React Hooks
>>: Deep understanding of the use of ::before/:before and ::after/:after
This article shares the specific code of JavaScri...
This article example shares the specific code of ...
This article mainly introduces 6 solutions to the...
During this period of time, I was studying docker...
Docker is becoming more and more mature and its f...
Table of contents 1. Uninstall the original drive...
Error screenshot Can't find where the excepti...
vuex-persistedstate Core principle: store all vue...
When using VMware Workstation to open a virtual m...
Table of contents background Why error handling? ...
1Several common character sets In MySQL, the most...
1. About Registry The official Docker hub is a go...
Be sure to remember to back up your data, it is p...
The cascading drop-down menu developed in this ex...
This article introduces MySQL string interception...