当前位置: 首页 > 知识库问答 >
问题:

使用keycloak的安全节点后端API

申屠森
2023-03-14

我正在实现一个Nodejs后端API。其中一些需要在访问之前进行身份验证。为此,我选择密钥斗篷服务器作为身份服务器。我使用npm keycloak-connect库来集成节点服务器和密钥斗篷服务器。现在身份验证很好。

问题是,当我使用'http://localhost:8080/auth/realms/test-realm/protocol/openid连接/注销此API。密钥斗篷服务器表示令牌不再有效。但当我使用相同的take访问节点服务器时,它将该令牌作为有效令牌。

'use strict';

const Keycloak = require('keycloak-connect');
const express = require('express');
var cors = require('cors')
const app = express();

app.use(cors())


var keycloakConfig ={
  "realm": "test-realm",
  "auth-server-url": "http://localhost:8080/auth",
  "ssl-required": "external",
  "resource": "test-dev-api",
  "public-client": true,
  "confidential-port": 0
}

var keycloak = new Keycloak({},keycloakConfig);

app.use( keycloak.middleware( { logout: '/logout'} ));

app.get('/secured-echo', keycloak.protect(), function(req,resp) {
  resp.send("Secured Hello");
});

//unprotected route
app.get('/echo', function(req,resp) {
  console.log(keycloakConfig)
  console.log(keycloak)
  resp.json({"say": "hello"});
});

app.listen(4000, function () {
  console.log('Listening at port:4000');
});

共有2个答案

鲜于煜祺
2023-03-14

我觉得你应该用< code > app . use(key cloak . middleware({ logout:'/logout ' });之前的这个

app.listen(4000, function () {
  console.log('Listening at port:4000');
});
谭翰海
2023-03-14

您的应用程序使用Express,它维护自己的会话并与Keycloak令牌同步这些会话。因此,在Keycloak上注销不会告诉Express您已注销。随后,您仍然可以登录到您的应用程序。

在您的代码中,您指定了以下内容:

app.use( keycloak.middleware( { logout: '/logout'} ));

这是您的应用程序上要在Express应用程序中注销的URL。使用它而不是直接注销Keycloak。然后,密钥斗篷中间件将在Keycloak中注销。它将类似于

http://localhost:4000/logout
 类似资料:
  • 我正在尝试让一个基本的节点oidc提供者应用程序作为我的密钥斗篷服务器的oidc提供者。 Keycoat正确链接到我的应用程序的登录页面。输入用户名和密码后,我会被正确地传送回keycoat。 但是,密钥斗篷显示“使用身份提供者进行身份验证时出现意外错误”。 编辑:我调整了keycoat日志级别,现在看到以下错误: 无法进行身份提供程序oauth回调:org.keycloak.broker.pro

  • 我当前的firebase结构如下所示 本来我的保安看起来 这一切都很好,因为我可以通过 然而,我想给这个分支增加更多的安全性,这样用户就不能通过写操作(读取是可以的)更新前端的代码来修改其中的一些条目。我希望用户能够根据isAdmin标志修改这些条目,例如, companyId(读:auth!=null,写:isAdmin==true) 因为所有读取=auth!=无效的起初,我认为因为我能够读取所

  • 我正在尝试将一个基本的节点 oidc 提供程序应用程序作为我的密钥斗篷服务器的 OIDC 提供程序。 钥匙斗篷正确链接到我的应用程序的登录页面。输入用户名和密码后,我正确转移回钥匙斗篷。 但是,密钥保护比说“使用标识提供者进行身份验证时出现意外错误”。 身份提供者配置:这里 我的应用: 从KeyClope跟踪: 注意:当我使用postman测试令牌endpoint时,它工作正常

  • 问题内容: 我正在开发基于NodeJs / Express的网站项目,对于某些UI部分,我正在使用Jquery ajax请求来获取辅助数据。 我们如何处理对我们的Rest API端点的一些基本控制,这些端点被浏览器用于ajax调用?我在考虑某种令牌授权,但是一旦被拦截,它也可以被其他客户端(脚本等)使用,那么我们如何保护服务器免受不必要的请求呢?在这种情况下,还应使用其他哪些控件(识别来自同一客户

  • 问题内容: 使用node / express-我想从请求标头中获取一些JSON,但我想安全地做到这一点。 如果由于某种原因它不是有效的JSON,那很好,它可以返回false或其他任何值,它将拒绝请求并继续执行。问题是,如果它不是有效的JSON,则会引发语法错误。通常,我希望语法错误能够爆发,但在这种情况下不希望。 我是否会刮取堆栈并检查来自该特定模块的错误解析调用,如果是这种情况,它将忽略它?这似

  • 后端 这是来自领域设置