国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

通過Nginx的auth_request以及ExpressJS構建權限驗證系統

zhaofeihao / 1487人閱讀

摘要:用戶通過此即可獲得服務器的認可授權。同時,此方案可以對同一域名下的不同子域名中的內容進行訪問限制。注意事項設置的時,由于本案例中使用了不同的子域名及,需要特別設置的項,如下所示其中的格式為。

本文的內容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。
項目主要是實現了通過合理配置Nginxauth_request模塊來實現對敏感路徑下的內容進行訪問限制。

代碼

可通過Github訪問:https://github.com/e10101/AdminLogin,來獲取代碼。如果可以的話,可以Star一下。

開發初衷

這個項目是為了解決網站中部分管理資源(路徑)需要進行權限限制,但又不想通過復雜系統去實現而進行編寫的項目.

同時這個項目也沒有采用Nginxauth_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),需要特別設置cookiedomain項,如下所示:

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

相關文章

  • 通過Nginxauth_request以及ExpressJS構建權限驗證系統

    摘要:用戶通過此即可獲得服務器的認可授權。同時,此方案可以對同一域名下的不同子域名中的內容進行訪問限制。注意事項設置的時,由于本案例中使用了不同的子域名及,需要特別設置的項,如下所示其中的格式為。 本文的內容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。項目主要是實現了通過合理配置Nginx的auth_request模塊來實現對敏感路徑...

    nidaye 評論0 收藏0
  • Docker 私有注冊中心身份認證

    摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經融入了我們的生活。我們鎖門...

    klinson 評論0 收藏0
  • Docker 私有注冊中心身份認證

    摘要:考慮到這一點,我們花費了一些時間審查了我們維護的多種系統,并在這星期,我給我們的私人注冊中心設置了添加身份認證的目標。你也許知道,注冊沒有提供身份認證的方法。授權響應觸發客戶端回應一組使用基本身份驗證的憑據。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經融入了我們的生活。我們鎖門...

    Cc_2011 評論0 收藏0
  • 單點登錄nginx代理及開發環境調試配置

    摘要:最近做項目,遇到單點登錄,方法是在前端做代理。調通之后開始思考如何在本地開發環境調試單點登錄這一功能。 最近做項目,遇到單點登錄,方法是在前端做nginx代理。應用系統需要配合做如下調整:1、使用*.頂級域名訪問,確保可以和KAM共享cookie2、對來自Nginx代理的訪問放開登錄認證(安全起見,對來自其他IP的訪問應該禁止)3、應用系統從請求頭kam_remote_user中讀取登...

    go4it 評論0 收藏0
  • NginxExpressJS轉發真實IP地址

    摘要:由于服務器配置了的反向代理,在中無法獲取到真實的地址。本文就介紹了如何配置以及使其可以顯示用戶的真實地址。中的設置在中的靠前位置,添加搞定通過上述的設置,現在你使用或就可以獲取到用戶真實的地址了。資料官網關于的文檔介紹中設置的文章 由于服務器配置了Nginx的反向代理,在ExpressJS中無法獲取到真實的IP地址。本文就介紹了如何配置Nginx以及ExpressJS使其可以顯示用戶的...

    leap_frog 評論0 收藏0

發表評論

0條評論

zhaofeihao

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<