iT邦幫忙

0

nginx搭配IdentityServer4設定問題

  • 分享至 

  • xImage

最近系統要導入認證授權,我們團隊是用ASP.NET Core 3.1開發,
因此這邊選擇使用IdentitySertver4來實作OAuth 2.0。

因為系統是要上線在公司企業網路上,因此要符合資安規定需走HTTPS以及申請網域名稱和憑證,所以我的設計是這樣:

利用nginx當作Proxy Server,由它負責掛載憑證跟Key啟用HTTPS,然後將IdentityServer跟MvcClient透過proxy_pass對應到實體服務位置,環境配置如下:

  • nginx
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

這邊我遇到幾個情況

  1. IdentityServer驗證會錯誤,因為在IdentityServer的RedirectUris = "https://example.com/signin-oidc",但request的網址是http://example.com/signin-oidc,因此IdentityServer會認證失敗,會一直導不到Login頁面。
  2. 後來我去資料庫把RedirectUris設成http://example.com/signin-oidc,後來成功導到Login畫面,但輸入完帳號密碼後出現這樣的錯誤訊息:

OpenIdConnectAuthenticationHandler: message.State is null or empty

經過反覆的測試以及找資料我覺得nginx還需要設定些什麼的樣子,但我沒有任何的想法@@
想請問各位高手大大們我這樣的配置是不是有問題?
nginx的設定是不是有漏?
還請多多指點迷津~!

yuwen iT邦新手 4 級 ‧ 2021-03-24 11:22:27 檢舉
OIDC協定有規範State參數,IdentityServer會使用State參數作為Session的判定,因此你的nginx必須允許所有的參數通過。另外關於第一點,RedirectUri指的是認證成功後要返回的網址,而不是你的OIDC Endpoint。
Joe Jhong iT邦新手 5 級 ‧ 2021-03-28 00:12:10 檢舉
恕我愚昧,我看很多範例都會在RedirectUri裡面最後加上signin-oidc,起初我也認為應該要輸入返回的網址,像是https://example.com/home/index,但IdentityServer4就會怪怪的,不知道是不是版本問題,不知道signin-oidc代表的意義是什麼?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
通通
iT邦新手 4 級 ‧ 2021-03-22 20:09:46

先把這個做調整

proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

Joe Jhong iT邦新手 5 級 ‧ 2021-03-23 08:53:46 檢舉

這個設上去沒有任何作用 QQ

我要發表回答

立即登入回答