摘要:用戶通過此即可獲得服務(wù)器的認(rèn)可授權(quán)。同時,此方案可以對同一域名下的不同子域名中的內(nèi)容進(jìn)行訪問限制。注意事項設(shè)置的時,由于本案例中使用了不同的子域名及,需要特別設(shè)置的項,如下所示其中的格式為。
本文的內(nèi)容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。
項目主要是實現(xiàn)了通過合理配置Nginx的auth_request模塊來實現(xiàn)對敏感路徑下的內(nèi)容進(jìn)行訪問限制。
可通過Github訪問:https://github.com/e10101/AdminLogin,來獲取代碼。如果可以的話,可以Star一下。
開發(fā)初衷這個項目是為了解決網(wǎng)站中部分管理資源(路徑)需要進(jìn)行權(quán)限限制,但又不想通過復(fù)雜系統(tǒng)去實現(xiàn)而進(jìn)行編寫的項目.
同時這個項目也沒有采用Nginx的auth_basic模塊來實現(xiàn)權(quán)限限制.二是通過auth_request來進(jìn)行的權(quán)限限制.
結(jié)構(gòu)框架本項目是基于NodeJS/ExpressJS/PassportJS以及Github的。
為講解方便,假設(shè)存在:
服務(wù)器A(server1.example.com),其路徑/installs上存有敏感信息,其他路徑可公開訪問,端口3003。
服務(wù)器B(login.example.com),為認(rèn)證服務(wù)器,其上部署了本項目代碼,端口4001。
系統(tǒng)以CentOS7.2為例,認(rèn)證使用的Github用戶認(rèn)證。
示意配置服務(wù)器A(server1)的Nginx配置文件
server { listen 80; listen [::]:80; server_name server1.example.com; location = /auth { internal; proxy_pass http://login.example.com; proxy_pass_request_body off; proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } error_page 401 = @error401; location @error401 { return 302 http://login.example.com; } location / { try_files $uri $uri/ @proxy; } # The path has secret content location /installs { auth_request /auth; try_files $uri $uri/ @proxy; } location @proxy { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; proxy_pass http://127.0.0.1:3003; } }
服務(wù)器B(login)的Nginx配置
server { listen 80; listen [::]:80; server_name login.example.com; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; proxy_pass http://127.0.0.1:4001/; } }基本流程
用戶訪問服務(wù)器A的敏感資源(即路徑/installs中的內(nèi)容),Nginx通過配置文件中的auth_request字段去請求http://login.example.com/auth,由于用戶并未在服務(wù)器B進(jìn)行登錄,因此服務(wù)器B返回了401無權(quán)限的錯誤。
根據(jù)服務(wù)器A的配置,發(fā)現(xiàn)401錯誤后,會向用戶返回302狀態(tài)指向為服務(wù)器B的主機(jī)地址(login.example.com)。
用戶瀏覽器跳轉(zhuǎn)到服務(wù)器B,并選擇第三方的用戶認(rèn)證進(jìn)行授權(quán)(此處以Github為例),當(dāng)用戶通過Github進(jìn)行授權(quán)后,回向服務(wù)器B返回用戶的個人信息。
服務(wù)器B從第三方反饋回的信息中,檢索出用戶的用戶名(username),然后服務(wù)器B會將此用戶名與已有的管理員信息進(jìn)行對比(此處通過配置文件實現(xiàn)),如果登錄用戶為合法的管理員賬號,則服務(wù)器B授權(quán)其登錄進(jìn)入。如果為非法用戶,則不對其授權(quán),因此非法用戶無法獲得有效登錄憑證。
如果用戶為合法用戶:
那么服務(wù)器B將會生成session,并通過Set-cookie命令告知用戶瀏覽器。用戶通過此Cookie即可獲得服務(wù)器B的認(rèn)可授權(quán)。當(dāng)用戶通過此Cookie訪問服務(wù)器B中的/auth目錄時,會返回200的狀態(tài)碼。
如果用戶為非法用戶:
那么服務(wù)器B將不會session,由于用戶無法獲得認(rèn)可的Cookie,那么當(dāng)用戶再次訪問/auth的路徑時,服務(wù)器會返回401錯誤。
假設(shè)用戶已經(jīng)授權(quán)成功,那么當(dāng)用戶訪問服務(wù)器A中的敏感內(nèi)容/installs時,服務(wù)器A訪問服務(wù)器B的/auth路徑,此時返回200狀態(tài)碼,服務(wù)器A則允許用戶進(jìn)行訪問。
以上,通過auth_request模塊以及相關(guān)配置就實現(xiàn)了對敏感內(nèi)容的訪問限制。而且通過第三方的機(jī)制,也無需自己手工實現(xiàn)登錄功能。同時,此方案可以對同一域名下的不同子域名中的內(nèi)容進(jìn)行訪問限制。可以重復(fù)利用一個登錄系統(tǒng),服務(wù)于多個其他系統(tǒng)。
注意事項
設(shè)置Express的session時,由于本案例中使用了不同的子域名(server1.example.com及l(fā)ogin.example.com),需要特別設(shè)置cookie的domain項,如下所示:
app.use(session({ secret: config.session.secret, cookie: { path: config.cookie.path, domain: config.cookie.domain, maxAge: config.cookie.maxAge } }));
其中的domain格式為:.example.com。
關(guān)于為何使用Github的問題。
國內(nèi)可以訪問(此項排除了Facebook,Google,Twitter等);
創(chuàng)建應(yīng)用簡單無需審核(此項排除了微信,微博等)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39310.html
摘要:用戶通過此即可獲得服務(wù)器的認(rèn)可授權(quán)。同時,此方案可以對同一域名下的不同子域名中的內(nèi)容進(jìn)行訪問限制。注意事項設(shè)置的時,由于本案例中使用了不同的子域名及,需要特別設(shè)置的項,如下所示其中的格式為。 本文的內(nèi)容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。項目主要是實現(xiàn)了通過合理配置Nginx的auth_request模塊來實現(xiàn)對敏感路徑...
摘要:考慮到這一點,我們花費了一些時間審查了我們維護(hù)的多種系統(tǒng),并在這星期,我給我們的私人注冊中心設(shè)置了添加身份認(rèn)證的目標(biāo)。你也許知道,注冊沒有提供身份認(rèn)證的方法。授權(quán)響應(yīng)觸發(fā)客戶端回應(yīng)一組使用基本身份驗證的憑據(jù)。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經(jīng)融入了我們的生活。我們鎖門...
摘要:考慮到這一點,我們花費了一些時間審查了我們維護(hù)的多種系統(tǒng),并在這星期,我給我們的私人注冊中心設(shè)置了添加身份認(rèn)證的目標(biāo)。你也許知道,注冊沒有提供身份認(rèn)證的方法。授權(quán)響應(yīng)觸發(fā)客戶端回應(yīng)一組使用基本身份驗證的憑據(jù)。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經(jīng)融入了我們的生活。我們鎖門...
摘要:最近做項目,遇到單點登錄,方法是在前端做代理。調(diào)通之后開始思考如何在本地開發(fā)環(huán)境調(diào)試單點登錄這一功能。 最近做項目,遇到單點登錄,方法是在前端做nginx代理。應(yīng)用系統(tǒng)需要配合做如下調(diào)整:1、使用*.頂級域名訪問,確保可以和KAM共享cookie2、對來自Nginx代理的訪問放開登錄認(rèn)證(安全起見,對來自其他IP的訪問應(yīng)該禁止)3、應(yīng)用系統(tǒng)從請求頭kam_remote_user中讀取登...
摘要:由于服務(wù)器配置了的反向代理,在中無法獲取到真實的地址。本文就介紹了如何配置以及使其可以顯示用戶的真實地址。中的設(shè)置在中的靠前位置,添加搞定通過上述的設(shè)置,現(xiàn)在你使用或就可以獲取到用戶真實的地址了。資料官網(wǎng)關(guān)于的文檔介紹中設(shè)置的文章 由于服務(wù)器配置了Nginx的反向代理,在ExpressJS中無法獲取到真實的IP地址。本文就介紹了如何配置Nginx以及ExpressJS使其可以顯示用戶的...
閱讀 2260·2023-04-25 14:50
閱讀 1234·2021-10-13 09:50
閱讀 1866·2019-08-30 15:56
閱讀 1839·2019-08-29 15:29
閱讀 2886·2019-08-29 15:27
閱讀 3548·2019-08-29 15:14
閱讀 1192·2019-08-29 13:01
閱讀 3299·2019-08-26 14:06