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
The default operating mode of MySQL is autocommit...
Table of contents What is the slow query log? How...
Related articles: 9 practical tips for creating we...
When we add an svg image to display, react prompt...
1. Basic Concepts //Any container can be specifie...
I'm looking for a job!!! Advance preparation:...
When I turned on my MAC at night, I found that th...
There are many reasons why an application is as s...
Recent experience in installing mysql5.7.17 free ...
In a recent problem, there is such a phenomenon: ...
docker attach command docker attach [options] 容器w...
1. First, download the latest version of MySQL fr...
This article example shares the specific code of ...
Table of contents The use of Vue's keep-alive...
Table of contents Preface Install vue-i18n Config...