我正在用 Node- & ExpressJS 構建一個 WebApp。目前我正在嘗試使用 keycloak-connect 模塊將我的應用程式連接到我們公司的 Keycloak。我按照不同教程中的說明對其進行了配置,并且可以正常作業(至少大部分情況下)。
當我連接到我的 WebApp 時,我會收到 keycloak 登錄螢屏并且登錄程序成功(在 keycloak 上創建了會話)。在登錄程序和重定向之后,我收到“訪問被拒絕”錯誤并在日志中“無法獲得授權代碼:無法獲得本地頒發者證書”。
WebApp 使用有效證書在埠 443 上運行
我已經搜索了所有可能的內容并嘗試了以下解決方案:
-- 禁用拒絕未經授權的 TLS --
使用節點環境變數禁用未經授權的證書的 TLS 拒絕:
- process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
有效,但不是很安全... Log。
-- 添加額外的 CA 證書 --
安裝 dotenv 模塊并在 .env 檔案中設定以下環境變數:
- NODE_EXTRA_CA_CERTS='/etc/pki/tls/cert.pem' (& ca-bundle.crt)
使用“require('dotenv').config();”將其包含在app.js中,不起作用......還嘗試將其設定為匯出的系統環境變數。
它位于代理后面,但我也將 express 配置為使用“app.set('trust proxy', true);”信任所有代理。
-- 版本 --
節點 - v16??.13.1
快遞 - ~4.16.1
Keycloak 連接 - ^16.1.1
我在許多不同的頁面上都看到了這個問題,但它們大多沒有完全解決......如果能找到這個問題的解決方案會很高興。
提前致謝!:)
雅尼克
uj5u.com熱心網友回復:
好吧,我找到了一個解決方案,而且效果很好!
這篇關于 GitHub 問題的評論描述了如何使用 HTTPS 服務器從 NodeJS 發送 ca 檔案。
您可以在陣列中輸入您的 ca 檔案/捆綁包:
const trustedCa = [
'/etc/pki/tls/certs/ca-bundle.crt',
'/etc/pki/tls/cert.pem'
];
然后使用 fileSync 讀取它們并將它們設定為 HTTPS 服務器的 globalAgent.options.ca 選項:
https.globalAgent.options.ca = [];
for (const ca of trustedCa) {
https.globalAgent.options.ca.push(fs.readFileSync(ca));
}
這就是所有需要做的!現在我可以通過 Keycloak 登錄,它成功地將我重定向到我的 WebApp,沒有任何錯誤。
希望這會有所幫助。
雅尼克
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427963.html
