Keycloak est une solution d'authentification et de gestion d'identité open-source écrite en Java. Il fournit un adaptateur nodejs avec lequel je suis capable de m'intégrer avec express. Voici le fichier itinéraires qui fonctionne:Impossible d'intégrer Keycloak avec Sails. Capable d'intégrer Keycloak à Express
'use strict';
module.exports = function(app) {
var Keycloak = require('keycloak-connect');
var session = require('express-session');
var memoryStore = new session.MemoryStore();
app.use(session({
secret: 'mySecret',
resave: false,
saveUninitialized: true,
store: memoryStore
}));
var keycloak = new Keycloak({
store: memoryStore
});
app.use(keycloak.middleware({
logout: '/logout',
admin: '/'
}));
// var lRController = require('../controllers/LRController');
//
// app.route('/lrs').get(lRController.list_all_lrs).post(lRController.create_a_lr);
var DeliveryOrderController = require('../controllers/DeliveryOrderController');
app.route('/').get(keycloak.protect(), DeliveryOrderController.getAllDos)
app.route('/api/dos').get(keycloak.protect(), DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo);
app.route('/api/do').put(DeliveryOrderController.updateDo);
app.route('/api/do/:doNumber').get(DeliveryOrderController.getDoByDoNumber);
app.route('/api/do/location/:locationId').get(DeliveryOrderController.getDoByLocation);
app.route('/api/do/branch/:branchId').get(DeliveryOrderController.getDoByBranch);
app.route('/api/do').delete(DeliveryOrderController.deleteDo);
var TransportDeliveryOrderController = require('../controllers/TransportDeliveryOrderController');
app.route('/api/tdos').get(TransportDeliveryOrderController.getAllTdos).post(TransportDeliveryOrderController.createTdo);
app.route('/api/tdo').put(TransportDeliveryOrderController.updateTdo);
app.route('/api/tdo/:tdoNumber').get(TransportDeliveryOrderController.getTdoByTdoNumber);
app.route('/api/tdo/status/:status').get(TransportDeliveryOrderController.getTdoByStatus);
app.route('/api/tdo/status/:status/do/:doNumber').get(TransportDeliveryOrderController.getTdoByStatusAndDo);
};
Comme vous pouvez le voir dans les voies de commande de livraison, j'ai deux itinéraires (copies de la même route) protégés par keycloak.protect()
. J'essaye de faire la même chose dans les voiles. J'ai les questions suivantes pour le faire.
a. Pour intégrer keycloak en exprimer les choses suivantes sont faites pour protéger les routes
Exiger Keycloak et session express:
var Keycloak = require('keycloak-connect');
var session = require('express-session');
Définir un magasin de mémoire pour le stockage des sessions:
var memoryStore = new session.MemoryStore();
Inclure la session comme middleware express
app.use(session({ secret: 'mySecret', resave: false, saveUninitialized: true, store: memoryStore }));
Initié Keycloak:
var keycloak = new Keycloak({ store: memoryStore });
Inclure Middleware keycloak dans le middleware express:
app.use(keycloak.middleware({ logout: '/logout', admin: '/' }));
PROTÉGER le itinéraire à l'aide
keycloak.protect()
app.route('/api/dos').get(keycloak.protect(),DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo);
Je dois établir des mesures similaires dans les voiles. Comment est-ce que je fais ces choses dans les voiles?
Je suppose que http.js est où j'ajoute middleware. Si oui, comment accéder keycloak dans routes.js pour utiliser keycloak.protect().
Par exemple, je peux ajouter la fonction de protection de la manière suivante:
'/foo': [
keycloak.protect(),
{ controller: 'user', action: 'find' }
]
Voici l'adaptateur nodejs pour keycloak - https://github.com/keycloak/keycloak-nodejs-connect
Une note plus: Vous pourriez avoir une fonction qui effectue une itération sur la liste de middleware et ont Sails appel cette seule fonction. Cela pourrait être inclus dans keycloak-connect lib. – nswartz