摘要:用戶通過此即可獲得服務器的認可授權。同時,此方案可以對同一域名下的不同子域名中的內容進行訪問限制。注意事項設置的時,由于本案例中使用了不同的子域名及,需要特別設置的項,如下所示其中的格式為。
本文的內容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。
項目主要是實現了通過合理配置Nginx的auth_request模塊來實現對敏感路徑下的內容進行訪問限制。
可通過Github訪問:https://github.com/e10101/AdminLogin,來獲取代碼。如果可以的話,可以Star一下。
開發初衷這個項目是為了解決網站中部分管理資源(路徑)需要進行權限限制,但又不想通過復雜系統去實現而進行編寫的項目.
同時這個項目也沒有采用Nginx的auth_basic模塊來實現權限限制.二是通過auth_request來進行的權限限制.
結構框架本項目是基于NodeJS/ExpressJS/PassportJS以及Github的。
為講解方便,假設存在:
服務器A(server1.example.com),其路徑/installs上存有敏感信息,其他路徑可公開訪問,端口3003。
服務器B(login.example.com),為認證服務器,其上部署了本項目代碼,端口4001。
系統以CentOS7.2為例,認證使用的Github用戶認證。
示意配置服務器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; } }
服務器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/; } }基本流程
用戶訪問服務器A的敏感資源(即路徑/installs中的內容),Nginx通過配置文件中的auth_request字段去請求http://login.example.com/auth,由于用戶并未在服務器B進行登錄,因此服務器B返回了401無權限的錯誤。
根據服務器A的配置,發現401錯誤后,會向用戶返回302狀態指向為服務器B的主機地址(login.example.com)。
用戶瀏覽器跳轉到服務器B,并選擇第三方的用戶認證進行授權(此處以Github為例),當用戶通過Github進行授權后,回向服務器B返回用戶的個人信息。
服務器B從第三方反饋回的信息中,檢索出用戶的用戶名(username),然后服務器B會將此用戶名與已有的管理員信息進行對比(此處通過配置文件實現),如果登錄用戶為合法的管理員賬號,則服務器B授權其登錄進入。如果為非法用戶,則不對其授權,因此非法用戶無法獲得有效登錄憑證。
如果用戶為合法用戶:
那么服務器B將會生成session,并通過Set-cookie命令告知用戶瀏覽器。用戶通過此Cookie即可獲得服務器B的認可授權。當用戶通過此Cookie訪問服務器B中的/auth目錄時,會返回200的狀態碼。
如果用戶為非法用戶:
那么服務器B將不會session,由于用戶無法獲得認可的Cookie,那么當用戶再次訪問/auth的路徑時,服務器會返回401錯誤。
假設用戶已經授權成功,那么當用戶訪問服務器A中的敏感內容/installs時,服務器A訪問服務器B的/auth路徑,此時返回200狀態碼,服務器A則允許用戶進行訪問。
以上,通過auth_request模塊以及相關配置就實現了對敏感內容的訪問限制。而且通過第三方的機制,也無需自己手工實現登錄功能。同時,此方案可以對同一域名下的不同子域名中的內容進行訪問限制。可以重復利用一個登錄系統,服務于多個其他系統。
注意事項
設置Express的session時,由于本案例中使用了不同的子域名(server1.example.com及login.example.com),需要特別設置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。
關于為何使用Github的問題。
國內可以訪問(此項排除了Facebook,Google,Twitter等);
創建應用簡單無需審核(此項排除了微信,微博等)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/39310.html
摘要:用戶通過此即可獲得服務器的認可授權。同時,此方案可以對同一域名下的不同子域名中的內容進行訪問限制。注意事項設置的時,由于本案例中使用了不同的子域名及,需要特別設置的項,如下所示其中的格式為。 本文的內容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。項目主要是實現了通過合理配置Nginx的auth_request模塊來實現對敏感路徑...
摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經融入了我們的生活。我們鎖門...
摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經融入了我們的生活。我們鎖門...
摘要:最近做項目,遇到單點登錄,方法是在前端做代理。調通之后開始思考如何在本地開發環境調試單點登錄這一功能。 最近做項目,遇到單點登錄,方法是在前端做nginx代理。應用系統需要配合做如下調整:1、使用*.頂級域名訪問,確保可以和KAM共享cookie2、對來自Nginx代理的訪問放開登錄認證(安全起見,對來自其他IP的訪問應該禁止)3、應用系統從請求頭kam_remote_user中讀取登...
摘要:由于服務器配置了的反向代理,在中無法獲取到真實的地址。本文就介紹了如何配置以及使其可以顯示用戶的真實地址。中的設置在中的靠前位置,添加搞定通過上述的設置,現在你使用或就可以獲取到用戶真實的地址了。資料官網關于的文檔介紹中設置的文章 由于服務器配置了Nginx的反向代理,在ExpressJS中無法獲取到真實的IP地址。本文就介紹了如何配置Nginx以及ExpressJS使其可以顯示用戶的...
閱讀 2270·2023-04-25 14:50
閱讀 1263·2021-10-13 09:50
閱讀 1872·2019-08-30 15:56
閱讀 1847·2019-08-29 15:29
閱讀 2891·2019-08-29 15:27
閱讀 3556·2019-08-29 15:14
閱讀 1201·2019-08-29 13:01
閱讀 3305·2019-08-26 14:06