nginx+lua实现登陆验证
用于在多台服务器上单点登录SSO、无SESSION,用户身份的 验证 。 1、安装lua yum install readline.x86_64 readline-devel.x86_64 wget http://www.lua.org/ftp/lua-5.1.5.tar.gz make linux make install 注意:不要使用5.2版本,5.2版本的lua和nginx的整合
用于在多台服务器上单点登录SSO、无SESSION,用户身份的验证。
1、安装lua
yum install readline.x86_64 readline-devel.x86_64
- wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
- make linux
- make install
- LUA_GLOBALSINDEX' undeclared (first use in this function)
参考:https://github.com/LuaLanes/lanes/issues/18
2、编译nginx
下载lua-nginx-module
- wget https://github.com/chaoslawful/lua-nginx-module/zipball/master
- file master
- unzip master
- mv chaoslawful-lua-nginx-module-06d654b/ lua-nginx-module
下载ngx_devel_kit
- https://github.com/simpl/ngx_devel_kit/zipball/master
- file master
- unzip master
- mv simpl-ngx_devel_kit-4192ba6/ simpl-ngx_devel_kit
- tar -xvzf nginx-1.2.1.tar.gz
- ./configure \
- --prefix=/usr/local/nginx \
- --with-http_stub_status_module \
- --without-poll_module \
- --without-select_module \
- --with-http_ssl_module \
- --with-http_realip_module \
- --with-http_perl_module \
- --add-module=../simpl-ngx_devel_kit \
- --add-module=../lua-nginx-module
make install
2、测试lua
测试
- location = /lua {
- content_by_lua '
- ngx.say("Hello, Lua!")
- ';
- }
3、登录验证
nginx添加配置
- access_by_lua_file 'conf/access.lua';
可以根据需要添加更多的验证域
- local secretkey='1234567890abcdefghi'
- if ngx.var.cookie_uid == nil or ngx.var.cookie_token == nil then
- ngx.req.set_header("Check-Login", "NULL")
- return
- end
-
- --local ctoken = ngx.md5('uid:' .. ngx.var.cookie_uid .. '&secretkey:' .. secretkey)
- local ctoken = ngx.md5(ngx.var.cookie_uid .. secretkey)
- if ctoken == ngx.var.cookie_token then
- ngx.req.set_header("Check-Login", "YES")
- else
- ngx.req.set_header("Check-Login", "NO")
- end
- return
如果uid+lua中的securekey的md5值和请求中的cookie的值一致,则设置request header中的HTTP_CHECK_LOGIN为YES,否则为No,如果不存在uid或token这两个cookie中的一个,则HTTP_CHECK_LOGIN设置为NULL。
关于Check-Login,HTTP_CHECK_LOGIN:
lua中设置的heaer为Check-Login,输出后就变成了HTTP_CHECK_LOGIN,即前面加了HTTP_,经过测试,有些会添加HTTP_,而有些则不会添加,如Content-Type。
详细信息查看:http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header
4、测试
使用perl cgi
perl打印ENV
-
#!/usr/bin/perl -w
-
use strict;
-
use CGI;
- use Data::Dumper;
-
-
my $query = new CGI;
-
print $query->header('text/html');
-
-
print Dumper \%ENV;
-
-
#if ($ENV{HTTP_CHECK_LOGIN} ne "YES"){
-
# print "not auth";
-
# exit;
- #}
注释部分是一个例子,针对认证的结果做更多的操作。
可以使用curl来带着cookie进行测试:
curl -b "uid=1234;token=8323d8c4a0533dc78c7051a074cdb286" http://127.0.0.1/7.cgi
如果使用echo 打印md5值,需要使用-n参数去掉回车
echo -n 123456789|md5sum
如何查看lua生成的md5?
location = /lua {
content_by_lua '
local ctoken = ngx.md5("12345" .. "6789")
ngx.say(ctoken)
';
}
关于查看access.lua生成的cookie
- local secretkey='cookiesecretKey'
- if ngx.var.cookie_uid == nil or ngx.var.cookie_token == nil then
- ngx.req.set_header("Check-Login", "NULL")
- return
- end
- --local ctoken = ngx.md5('uid:' .. ngx.var.cookie_uid .. '&secretkey:' .. secretkey)
- local ctoken = ngx.md5(ngx.var.cookie_uid .. secretkey)
- if ctoken == ngx.var.cookie_token then
- ngx.req.set_header("Check-Login", "YES")
- print (ctoken)
- print (ngx.var.cookie_token)
- else
- ngx.req.set_header("Check-Login", "NO")
- print (ctoken)
- print (ngx.var.cookie_token)
- end
- return
打开nginx的log到debug,从error里可以看到access.lua的输出
通过html种植cookie
-
html xmlns="http://www.w3.org/1999/xhtml">
-
head>
-
meta http-equiv="Content-Type" content="text/html; charset=gbk">
-
/head>
-
-
body>
-
p>
-
script>
-
document.cookie="domain=intercom.com.cn";
-
document.cookie="uid=1234";
-
document.cookie="token=dbd19902c04fdc68ee8b97510f454614";
-
//document.cookie="expires=Sat, 31-Dec-39 23:59:59 GMT";
-
document.write(document.cookie);
-
/script>
-
/p>
-
/body>
- /html>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DHCP中繼的作用是將接收到的DHCP封包轉送到網路上的另一個DHCP伺服器,即使這兩台伺服器位於不同的子網路中。透過使用DHCP中繼,您可以實現在網路中心部署集中式的DHCP伺服器,並利用它為所有網路子網路/VLAN動態分配IP位址。 Dnsmasq是一種常用的DNS和DHCP協定伺服器,可設定為DHCP中繼伺服器,以協助管理網路中的動態主機設定。在本文中,我們將向您展示如何將dnsmasq配置為DHCP中繼伺服器。內容主題:網路拓樸在DHCP中繼上設定靜態IP位址集中式DHCP伺服器上的D

1.打開微信進入後,點選搜尋圖標,輸入微信團隊,點選下方的服務進入。 2、進入後,點選左下方的自助工具的選項。 3、點選後,在上方的選項內,點選解封/申訴輔助驗證的選項。

企業微信的郵箱怎麼登陸?企業微信APP中是可以登陸郵箱,但是多數的用戶不知道郵箱如何的登陸,接下來就是小編為用戶帶來的企業微信郵箱登陸方法圖文教程,感興趣的用戶快來一起看看吧!企業微信使用教程企業微信的郵箱怎麼登陸1、先打開企業微信APP,進入到主頁最底部【工作台】點擊來專區;2、之後在工作台專區中,選擇其中的【企業郵箱】服務; 3.然後跳到企業信箱功能頁,點選底部的【綁定】或【換一個信箱】;4、最後在下圖所示的頁面輸入【QQ帳號】和【密碼】即可登陸信箱。

華為手機如何實現雙微信登入?隨著社群媒體的興起,微信已成為人們日常生活中不可或缺的溝通工具之一。然而,許多人可能會遇到一個問題:在同一部手機上同時登入多個微信帳號。對於華為手機用戶來說,實現雙微信登入並不困難,本文將介紹華為手機如何實現雙微信登入的方法。首先,華為手機自帶的EMUI系統提供了一個很方便的功能-應用程式雙開。透過應用程式雙開功能,用戶可以在手機上同

在網路資料傳輸中,IP代理伺服器扮演著重要的角色,能夠幫助使用者隱藏真實IP位址,保護隱私、提升存取速度等。在本篇文章中,將介紹如何用PHP建立IP代理伺服器的最佳實務指南,並提供具體的程式碼範例。什麼是IP代理伺服器? IP代理伺服器是位於使用者與目標伺服器之間的中間伺服器,它可作為使用者與目標伺服器之間的中轉站,將使用者的請求和回應轉發。透過使用IP代理伺服器

程式語言PHP是一種用於Web開發的強大工具,能夠支援多種不同的程式設計邏輯和演算法。其中,實作斐波那契數列是一個常見且經典的程式設計問題。在這篇文章中,將介紹如何使用PHP程式語言來實作斐波那契數列的方法,並附上具體的程式碼範例。斐波那契數列是一個數學上的序列,其定義如下:數列的第一個和第二個元素為1,從第三個元素開始,每個元素的值等於前兩個元素的和。數列的前幾元

Wegame是一款搭配騰訊遊戲使用的軟體,可以透過它來啟動遊戲,獲得加速,而近期有不少用戶在使用的時候出現了登陸操作過於頻繁的提示,面對這個提示,許多用戶都不知道怎麼才能夠成功解決,那麼本期軟體教學就來和大夥分享解決方法,一起來了解看看吧。 Wegame登陸操作過於頻繁怎麼辦? 方法一: 1、先確認一下我們的網路連線是否正常。 (可以嘗試開啟瀏覽器,看看能不能上網) 2、如果是網路故障,那麼試著重新啟動路由器、重新連線、重新啟動電腦來解決。 方法二: 1、如果網路沒有問題,那麼選擇&

epic伺服器離線進不了遊戲怎麼辦?這個問題想必很多小夥伴都有遇過,出現了此提示就是導致正版的遊戲無法啟動,那麼出現這個問題一般是網絡和安全軟體幹擾導致的,那麼應該怎麼解決呢,本期小編就來和大夥分享解決方法,希望今日的軟體教學可以幫助各位解決問題。 epic伺服器離線進不了遊戲怎麼辦: 1、很可能是被安全軟體幹擾了,將遊戲平台和安全軟體關閉在重啟。 2、其次就是網路波動過大,嘗試重啟一次路由器,看看是否有效,如果條件可以的話,可以嘗試使用5g移動網絡來進行操作。 3、然後有可能是更
