Hola a todos, estoy trabajando en una aplicación de 3 partes:
Las dos primeras partes funcionan a la perfección, puedo autenticarme en mi servidor KC con mi aplicación Angular, obtener los roles, etc.
Esta semana, comencé a trabajar con el backend, instalé keycloak-connect siguiendo la documentación oficial y otros, para solucionar mi problema actual.
Este es el código condensado que estoy intentando:
var express = require('express'); var session = require('express-session'); var Keycloak = require('keycloak-connect'); var memoryStore = new session.MemoryStore(); var keycloak = new Keycloak({ store: memoryStore }); var app = express(); //session app.use(session({ secret:'thisShouldBeLongAndSecret', resave: false, saveUninitialized: true, store: memoryStore })); app.use( keycloak.middleware() ); app.get('/check', keycloak.checksso('user'), function(req, res){ console.log(req.headers); res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ 'this': 'works!' }, null, 3)); }); app.get('/check', keycloak.enforce('user'), function(req, res){ console.log(req.headers); res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ 'this': 'does not work' }, null, 3)); }); app.listen(8000, function () { console.log('Listening at http://localhost:8000'); });Además, tengo un archivo .json proporcionado por mi servidor KC después de configurar el cliente de solo portador, por lo que este debería estar bien.
Tenga en cuenta que el uso de .checkSSO() funciona como se esperaba, mientras que el uso de protect('my-role') o enforce('my-role') no lo hace.
Mi backend expreso obtuvo el token Angular correctamente, y verifiqué el rol my-role usando el servicio https://www.jstoolset.com/jwt , y todo está bien.
Habilité LOGLEVEL en mi servidor KC, no obtuve nada usando protect(), pero recibí un mensaje usando enforce():
keycloak-connect : type=PERMISSION_TOKEN_ERROR, userId=null, ipAddress=, error=invalid_client_credentialsEsto es extraño para mí, ya que el cliente dedicado que estoy usando para mi back-end, está configurado solo como portador, y no hay lugar para tal secreto dentro del archivo de configuración que me proporciona mi servidor KC...
Creo que no avanzaré más sin su ayuda, estuve navegando toda la semana, probé muchas pistas, sin suerte hasta ahora...
Gracias por su ayuda si la hay, amables extraños...