【问题标题】:Node- / ExpressJS - Could not obtain grant code: unable to get local issuer certificateNode- / ExpressJS - 无法获得授权代码:无法获得本地颁发者证书
【发布时间】:2022-02-16 15:50:59
【问题描述】:

我正在使用 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 中,不起作用...还尝试使用 export 将其设置为系统环境变量。


它支持代理,但我也将 express 配置为使用“app.set('trust proxy', true);”信任所有代理。


-- 版本--

节点 - v16​​.13.1

快递 - ~4.16.1

Keycloak 连接 - ^16.1.1


我在许多不同的页面上都看到过这个问题,但大多数都没有完全解决...如果能找到解决这个问题的方法就好了。

提前致谢! :)

亚尼克

【问题讨论】:

    标签: node.js express ssl keycloak


    【解决方案1】:

    好吧,我找到了一个解决方案,而且效果很好!

    GitHub 问题上的 comment 描述了如何使用 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,没有任何错误。

    希望这会有所帮助。

    亚尼克

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 2022-06-21
      • 2016-04-20
      • 1970-01-01
      • 2015-01-17
      • 2021-07-17
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多