无法将Keycloak与Sails整合。 能够整合Keycloak和Express

Keycloak是一个用Java编写的开源authentication和身份pipe理解决scheme。 它提供了一个nodejs适配器,使用它我可以成功地与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); }; 

正如你可以看到在交付订单路线,我有两个路线(同一路线的副本)由keycloak.protect()保护。 我正在试图在帆中做同样的事情。 我有这样做的下列问题。

一个。 为了整合keycloak,我们做了以下的事情来保护路线

  1. 需要Keycloak和快速会议:

    var Keycloak = require('keycloak-connect'); var session = require('express-session');

  2. 为存储会话定义一个内存存储:

    var memoryStore = new session.MemoryStore();

  3. 将会话作为中间件包含在express中

    app.use(session({ secret: 'mySecret', resave: false, saveUninitialized: true, store: memoryStore }));

  4. 启动Keycloak:

    var keycloak = new Keycloak({ store: memoryStore });

  5. 将keycloak中间件包含到express中间件中:

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

  6. 使用keycloak.protect()保护路由

    app.route('/api/dos').get(keycloak.protect(),DeliveryOrderController.getAllDos).post(DeliveryOrderController.createDo);

我需要在帆中build立类似的步骤。 我如何在帆上做这些事情?

我假设http.js是我添加中间件的地方。 如果我这样做,如何在routes.js中访问keycloak以使用keycloak.protect()。

比如我可以通过以下方式添加保护function:

 '/foo': [ keycloak.protect(), { controller: 'user', action: 'find' } ] 

这里是keycloak的nodejs适配器 – https://github.com/keycloak/keycloak-nodejs-connect

Interesting Posts