最近系統要導入認證授權,我們團隊是用ASP.NET Core 3.1開發,
因此這邊選擇使用IdentitySertver4來實作OAuth 2.0。
因為系統是要上線在公司企業網路上,因此要符合資安規定需走HTTPS以及申請網域名稱和憑證,所以我的設計是這樣:
利用nginx當作Proxy Server,由它負責掛載憑證跟Key啟用HTTPS,然後將IdentityServer跟MvcClient透過proxy_pass對應到實體服務位置,環境配置如下:
location / {
proxy_pass http://localhost:5001;
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;
}
location /identity/ {
proxy_pass http://localhost:5004;
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;
}
MvcClient為入口網站網址是https://example.com/
,IdentityServer為認證伺服器網址是https://example.com/identity
這邊我遇到幾個情況
RedirectUris = "https://example.com/signin-oidc"
,但request的網址是http://example.com/signin-oidc
,因此IdentityServer會認證失敗,會一直導不到Login頁面。RedirectUris
設成http://example.com/signin-oidc
,後來成功導到Login畫面,但輸入完帳號密碼後出現這樣的錯誤訊息:OpenIdConnectAuthenticationHandler: message.State is null or empty
經過反覆的測試以及找資料我覺得nginx還需要設定些什麼的樣子,但我沒有任何的想法@@
想請問各位高手大大們我這樣的配置是不是有問題?
nginx的設定是不是有漏?
還請多多指點迷津~!
先把這個做調整
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;