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

資訊專欄INFORMATION COLUMN

通過Nginx的auth_request以及ExpressJS構(gòu)建權(quán)限驗證系統(tǒng)

zhaofeihao / 1473人閱讀

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

本文的內(nèi)容是我的開源代碼(https://github.com/e10101/AdminLogin)的中文說明。
項目主要是實現(xiàn)了通過合理配置Nginxauth_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)行編寫的項目.

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

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

相關(guān)文章

  • 通過Nginxauth_request以及ExpressJS構(gòu)建權(quán)限驗證系統(tǒng)

    摘要:用戶通過此即可獲得服務(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)對敏感路徑...

    nidaye 評論0 收藏0
  • Docker 私有注冊中心身份認(rè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)融入了我們的生活。我們鎖門...

    klinson 評論0 收藏0
  • Docker 私有注冊中心身份認(rè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)融入了我們的生活。我們鎖門...

    Cc_2011 評論0 收藏0
  • 單點登錄nginx代理及開發(fā)環(huán)境調(diào)試配置

    摘要:最近做項目,遇到單點登錄,方法是在前端做代理。調(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中讀取登...

    go4it 評論0 收藏0
  • NginxExpressJS轉(zhuǎn)發(fā)真實IP地址

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

    leap_frog 評論0 收藏0

發(fā)表評論

0條評論

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