本地 Keycloak 设置返回“错误:无法验证第一个证书”nodejs 错误
Posted
技术标签:
【中文标题】本地 Keycloak 设置返回“错误:无法验证第一个证书”nodejs 错误【英文标题】:Local Keycloak setup returns "Error: unable to verify the first certificate" nodejs error 【发布时间】:2021-06-11 12:17:11 【问题描述】:尝试使用 Keycloak 作为在 minikube 上的 Kubernetes 集群中运行的 SSO 来验证演示 nodejs 应用程序:
var express = require('express');
var session = require('express-session');
var Keycloak = require('keycloak-connect');
var cors = require('cors');
var app = express();
app.use(cors());
const memoryStore = new session.MemoryStore();
app.use(session(
secret: 'some secret',
resave: false,
saveUninitialized: true,
store: memoryStore
));
var keycloakConfig =
"realm": "Demo-Realm",
"auth-server-url": "https://keycloak.192.168.49.2.nip.io/auth/",
"ssl-required": "external",
"resource": "nodejs-microservice",
"verify-token-audience": true,
"credentials":
"secret": "14de3a01-5c15-42fd-aa6a-fcc35c0961ff"
,
"use-resource-role-mappings": true,
"confidential-port": 0,
"policy-enforcer":
;
const keycloak = new Keycloak( store : memoryStore , keycloakConfig );
app.use(keycloak.middleware(
logout: '/logout',
admin: '/'
));
app.get('/user', keycloak.protect('user'), function(req, res)
res.send("Hello User");
);
app.listen(3000, function ()
console.log('Started at port 3000');
);
但是在使用 NodeJS 控制台错误访问 http://localhost:3000/user
时获得 Access denied
页面:Could not obtain grant code: Error: unable to verify the first certificate
我在 Keycloak 中使用以下设置创建了 Demo-Realm
领域:
nodejs-microservice client:
Access Type: confidential
Valid Redirect URIs: http://localhost:3000/*
Authorization Enabled: ON
Roles: [ 'user', 'admin' ]
没有发生登录重定向(basic 示例虽然可以正常工作)。可能是什么问题呢?如何使用 Keycloak 保护我的 NodeJS 微服务?
【问题讨论】:
【参考方案1】:问题在某种程度上与 Keycloak 端的默认自签名证书有关。人们建议花一些时间来获得适当的证书。
可以通过在 api/express 调用之前放置这样一行在 NodeJS 端静音证书验证来临时解决:
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
【讨论】:
以上是关于本地 Keycloak 设置返回“错误:无法验证第一个证书”nodejs 错误的主要内容,如果未能解决你的问题,请参考以下文章
来自本地 kubernetes 集群的 Keycloak 端口转发
Keycloak 3.4.3 和 springboot 2.0
Keycloak + Spring Security,通过本地登录表单