首页 > 解决方案 > 本地 Keycloak 设置返回“错误:无法验证第一个证书”nodejs 错误

问题描述

尝试使用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 控制台错误Access denied访问时获取页面:http://localhost:3000/userCould not obtain grant code: Error: unable to verify the first certificate

Demo-Realm在 Keycloak 中创建了具有以下设置的领域:

nodejs-microservice client:
    Access Type: confidential
    Valid Redirect URIs: http://localhost:3000/*
    Authorization Enabled: ON
    Roles: [ 'user', 'admin' ]

没有发生登录重定向(基本示例虽然可以正常工作)。可能是什么问题呢?如何使用 Keycloak 保护我的 NodeJS 微服务?

标签: keycloak

解决方案


问题在某种程度上与 Keycloak 端的默认自签名证书有关。人们建议花一些时间来获得适当的证书。

可以通过在 api/express 调用之前放置这样的行在 NodeJS 端静音证书验证来临时解决:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;

推荐阅读