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
Purchase Certificate You can purchase it from Ali...
This article records the specific method of insta...
2048 mini game, for your reference, the specific ...
Tencent QQ’s homepage has been redesigned, and Web...
mycli MyCLI is a command line interface for MySQL...
Problem Description Several machines recently dis...
Pull the image docker pull season/fastdfs:1.2 Sta...
Table of contents Filters 01.What is 02. How to d...
Table of contents 1. Docker Image 2. Create an in...
Today is still a case of Watch app design. I love...
<br />I have been working in front-end for s...
1. float+overflow:hidden This method mainly trigg...
When submitting a form, you may encounter situatio...
First, start MySQL in skip-grant-tables mode: mys...
If you are using the latest Ubuntu Server version...