Identity Server 4 從入門到落地(十二)—— 使用Nginx整合認證服務

尋找無名的特質發表於2021-12-14

前面的部分:
Identity Server 4 從入門到落地(一)—— 從IdentityServer4.Admin開始
Identity Server 4 從入門到落地(二)—— 理解授權碼模式
Identity Server 4 從入門到落地(三)—— 建立Web客戶端
Identity Server 4 從入門到落地(四)—— 建立Web Api
Identity Server 4 從入門到落地(五)—— 使用Ajax 訪問 Web Api
Identity Server 4 從入門到落地(六)—— 簡單的單頁面客戶端
Identity Server 4 從入門到落地(七)—— 控制檯客戶端
Identity Server 4 從入門到落地(八)—— .Net Framework 客戶端
Identity Server 4 從入門到落地(九)—— 客戶端User和Role的解析
Identity Server 4 從入門到落地(十)—— 編寫可配置的客戶端和Web Api
Identity Server 4 從入門到落地(十一)—— Docker部署

認證服務和管理的github地址: https://github.com/zhenl/IDS4Admin
客戶端及web api示例程式碼的github地址:https://github.com/zhenl/IDS4ClientDemo

在前面我們將認證服務和管理應用作為容器部署,分別執行在不同的埠,後續的應用模組和Web Api也可以採用這種方式進行部署。採用這種方式可以將複雜的系統分解為相互獨立的模組,部署在不同的容器中,這些模組可以獨立開發、獨立部署、獨立維護。這樣帶來的問題每個模組或者服務都需要對外的埠,而使用者希望所有的模組有統一的地址,比如管理服務部署在http://demo.jiagoushi.cn:7003,認證服務部署在http://demo.jiagoushi.cn:7010,門戶部署在http://demo.jiagoushi.cn:8000等等,而從使用者的角度出發,我們希望相應的地址是http://demo.jiagoushi.cn/ids4sts,http://demo.jiaogoushi.cn/ids4admin和http://demo.jiagoushi.cn/protal。這時,反向代理伺服器就派上用場了,接下來我們使用反向代理伺服器nginx將認證服務和管理應用整合在一起。

首先安裝nginx的容器,在安裝之前,在伺服器建立一個目錄,用來對映nginx的配置,在這個例子中,這個目錄是/mydata/nginx/conf/conf.d,在這個目錄中建立一個配置檔案default.conf,配置檔案的內容如下:

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    

    location ^~/ids4admin/ {
	proxy_pass http://demo.jiagoushi.cn:7003;
	proxy_http_version 1.1;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection keep-alive;
    	proxy_set_header Host $host;
    	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;
    	proxy_cache_bypass $http_upgrade;
  
        proxy_set_header Via    "nginx";
	fastcgi_buffers 16 16k; 
	fastcgi_buffer_size 32k;
	proxy_buffer_size          128k;
	proxy_buffers            4 256k;
	proxy_busy_buffers_size    256k;
       
    }

    location ^~/ids4sts/ {
	proxy_pass http://demo.jiagoushi.cn:7010;
        proxy_http_version 1.1;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection keep-alive;
    	proxy_set_header Host $host;
    	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;
    	proxy_cache_bypass $http_upgrade;
  
        proxy_set_header Via    "nginx";
	fastcgi_buffers 16 16k; 
	fastcgi_buffer_size 32k;
	proxy_buffer_size          128k;
	proxy_buffers            4 256k;
	proxy_busy_buffers_size    256k;
    }



    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}


從配置檔案可以看出,我們將部署在7010的認證服務對映到/ids4sts,將部署在7003的管理應用對映到/ids4admin。然後建立並執行nginx容器

docker create --name=mynginx  --volume=/mydata/nginx/conf/conf.d:/etc/nginx/conf.d -p 80:80 nginx 
docker start mynginx

現在我們需要登入到認證伺服器的管理應用,修改客戶端的配置,將引用埠7003的地址改為/ids4admin。我們克隆現有的客戶端,然後在新的客戶端定義上修改,新的客戶名稱為IDS4AdminClientNew,基本配置如下:

認證和登出:

令牌:

同意螢幕:

定義修改完成後,還需要修改客戶端的配置檔案ids4/admin/appsettings.production.json:

還有認證服務的配置檔案ids4/sts/appsettings.production.json:

配置檔案修改完成後,需要重新啟動docker 容器:
docker restart ids4sts
docker restart ids4admin
然後就可以通過瀏覽器訪問了:http://demo.jiagoushi.cn/ids4admin和http://demo.jiagoushi.cn/ids4sts
到這裡,我們基本完成了落地的準備工作,我們使用了一個相對成熟的Identity Server 4 認證服務和管理應用,在此基礎上熟悉和驗證了各種客戶端的編寫,還驗證了認證服務在Docker下的部署以及與反向代理伺服器的整合。希望這個系列對大家有所幫助。

相關文章