本地 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,通过本地登录表单

Node-RED 和 nodemailer - 错误:无法验证第一个证书

如何在 KeyCloak 中禁用所有形式的本地缓存?

Spring Boot 和 Keycloak - GrantedAuthority 总是空着回来