node.js - 无法获取授权代码:错误:证书链中的自签名证书 - NodeJS 适配器 Keycloak
问题描述
我有用 nodeJS 编写的应用程序。我正在使用来自 npm 的 keycloak-connect 来使用 keycloak 登录。
当我想登录时,应用程序会将我重定向到 keycloak 网站,然后我输入登录详细信息,然后出现错误:
“无法获得授权代码:错误:证书链中的自签名证书” post-auth.js:58
我知道我可以使用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
,但它不安全。我如何在 nodeJS / keycloak-adapter 中设置 CA 证书?
post-auth.js:
keycloak.getGrantFromCode(request.query.code, request, response)
.then(grant => {
let urlParts = {
pathname: request.path,
query: request.query
};
delete urlParts.query.code;
delete urlParts.query.auth_callback;
delete urlParts.query.state;
delete urlParts.query.session_state;
let cleanUrl = URL.format(urlParts);
request.kauth.grant = grant;
try {
keycloak.authenticated(request);
} catch (err) {
console.log(err);
}
response.redirect(cleanUrl);
}).catch((err) => {
keycloak.accessDenied(request, response, next);
console.error('Could not obtain grant code: ' + err);
});
keycloak.js:
Keycloak.prototype.getGrantFromCode = function (code, request, response) {
if (this.stores.length < 2) {
// bearer-only, cannot do this;
throw new Error('Cannot exchange code for grant in bearer-only mode');
}
var sessionId = request.session.id;
var self = this;
return this.grantManager.obtainFromCode(request, code, sessionId)
.then(function (grant) {
self.storeGrant(grant, request, response);
return grant;
});
};
解决方案
您应该通过将 NODE_EXTRA_CA_CERTS 环境变量配置为指向包含受信任的根权限的文件位置来在环境级别解决此问题。
我的博客文章对此有更多信息:
通常,您只需在部署管道的早期阶段(例如在开发人员 PC 上)进行此配置更改。当然,它不应该在生产环境中制作。
推荐阅读
- google-chrome - 谷歌翻译在 Chrome 中显示空白屏幕
- python-3.x - python中更好的曲线拟合
- javascript - axios 没有从 api 获取任何数据
- python - 有没有办法在不下载的情况下使用 pyspark 处理 s3 存储桶的 json 文件?
- c++ - 如何声明和初始化此地图
, 布尔>? - swift - 如何使用 SceneKit 和 Swift 更改在搅拌机中创建的形状的颜色?
- excel - 将行汇总到上一行中的最后一个条目
- r - 如何从 ggpredict 更改绘图中轴标签的外观?
- javascript - 我可以从服务器中的同一地址创建两个不同的 GET 请求吗
- c# - Audit.NET 动态获取数据库凭据