Защищенные серверные API nodejs с использованием keycloak

Я реализую API серверной части Nodejs. Некоторые из них требуют аутентификации перед доступом. для этого я выбираю сервер keycloak в качестве сервера идентификации. Я использовал библиотеку npm keycloak-connect для интеграции сервера узлов и сервера keycloak. Теперь аутентификация работает нормально.

проблема в том, что когда я выхожу из сервера keycloak, используя 'http://localhost:8080/auth/realms/test-realm/protocol/openid-connect/logout 'этот API. сервер keycloak сообщает, что токен больше не действителен. Но когда я использовал то же самое, что и для доступа к серверу Node, он принимает этот токен как действительный токен.

'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');
});

person Padmasankha    schedule 20.08.2019    source источник


Ответы (2)


Ваше приложение использует Express, который поддерживает свои собственные сеансы и синхронизирует их с токенами Keycloak. Таким образом, выход из Keycloak не сообщает Express, что вы вышли из системы. Впоследствии вы все еще можете войти в свое приложение.

В вашем коде вы указали это:

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

Каков URL-адрес вашего приложения для выхода из приложения Express. Используйте это вместо прямого выхода из Keycloak. Затем промежуточное программное обеспечение keycloak выйдет из системы Keycloak. Это будет что-то вроде

http://localhost:4000/logout
person Robin    schedule 01.12.2019

Я думаю, тебе стоит использовать app.use( keycloak.middleware( { logout: '/logout'} )); этот раньше

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