Node- / ExpressJS - 无法获得授权代码:无法获得本地颁发者证书
Node- / ExpressJS - Could not obtain grant code: unable to get local issuer certificate
我正在使用 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-connect - ^16.1.1
我在很多不同的页面上都看到过这个问题,但大多数都没有完全解决...如果能找到解决这个问题的方法就好了。
提前致谢! :)
雅尼奇
好吧,我找到了解决方案,而且效果很好!
comment GitHub 问题描述了如何从 NodeJS 使用 HTTPS 服务器发送 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,没有任何错误。
希望这对您有所帮助。
雅尼奇
我正在使用 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-connect - ^16.1.1
我在很多不同的页面上都看到过这个问题,但大多数都没有完全解决...如果能找到解决这个问题的方法就好了。
提前致谢! :)
雅尼奇
好吧,我找到了解决方案,而且效果很好!
comment GitHub 问题描述了如何从 NodeJS 使用 HTTPS 服务器发送 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,没有任何错误。
希望这对您有所帮助。
雅尼奇