keycloak - 本地 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/user
Could 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 端的默认自签名证书有关。人们建议花一些时间来获得适当的证书。
可以通过在 api/express 调用之前放置这样的行在 NodeJS 端静音证书验证来临时解决:
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
推荐阅读
- sql - 从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)
- python - Python消息框程序
- asp.net - NET平台识别
- python - Windows更新后屏幕上的Pygame对象移动了吗?
- javascript - React Native:如何将 taskmanager 返回的 promise 中的值发送到 redux 商店?
- java - 为什么当 y>5 和 x=2 时这个带有 for 循环的程序给出零
- python - 如何根据分类值将时间序列拆分为固定长度的连续子集?
- processmaker - Processmaker 作曲家安装有错误
- latex - 如何在 pandoc 中移动“数字列表”(很多)
- reactjs - React Redux:更新对象数组中的项目