Используйте keycloak.protect () с express.Router () - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу обезопасить свои маршруты с помощью Keyclaok, который является открытым исходным кодом и управление доступомЯ пытался следовать их документации, но до сих пор не смог заставить ее работать.

Вот мой файл app.js:

const express=require('express);
const routePlaces= require('./routes/placesRoutes');

const Keycloak=require('keycloak-connect');
const session=require('express-session);
const memoryStrore= new session.MemoryStore();

let kcConfig={
    clientId='parking-app',
    bearerOnly:true,
    serverUrl:'localhost:8080/auth',
    realm:'FlexParking',
    reamlPublicKey:'MIIBIjANBg…...')
}

var keycloak=new KeyCloak({store: memoryStore},kcConfig);

app.use(keycloak.middleware({

//  here i think i have to place my routes

}));

app.use('/places, routePlaces);
module.exports=app;

Сервер создан на сервере.Файл js и все конечные точки работают отлично, прежде чем пытаться использовать keycloak.

Вот мой файл routePlaces.js:

'use strict';
const express=require('express');
const place=require('../controllers/placesController);

router.route('/gps').get(place.get_place_by_gps);
router.route('/street').get(place.get_place_by_street);

module.exports=router;

А вот мой placeController.js

'use strict';

exports.get_place_by_gps=(req,res,next)=>{
    res.send(' GET places by the GPS position');
}

exports.get_place_by_street=(req,res,next)=>{
    res.send(' GET places by the street name');
}

Я хочу, чтобы мой маршрут ('/ place / gps') был защищен с помощью keycloak.connect ('...') и (/ place / street '), которые будут использоваться без какой-либо защиты.Как настроить промежуточное программное обеспечение Keycloak для этого?

app.use(keycloak.middleware({

//  here i think i have to place my routes

}));

Каким должен быть мой маршрут, который я хочу защитить:

router.route('/gps').get(place.get_place_by_gps,keycloak.connect('user');

что-то как указано выше?

1 Ответ

0 голосов
/ 10 декабря 2018
> app.use(keycloak.middleware({
> 
> //  here i think i have to place my routes
> 
> }));

Это неверно.Вы должны пройти туда options.

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

Каким должен быть мой маршрут, который я хочу защитить:

router.route ('/ gps').get (place.get_place_by_gps, keycloak.connect ('user'); что-то, как указано выше?

keycloak.middleware()

Сама не защищена. Просто пытается получить данные grant иззапросите и поместите его в специальный объект request.kauth.grant. Также он выполняет некоторые дополнительные действия, например, проверяет запрос на выход из системы.

Для защиты ресурса необходимо добавить keycloak.protect()

 app.get('/gps', keycloak.protect(), handler);

Чтобы не защищать ресурс, просто ничего не добавляйте

 app.get('/street', handler);

Это более сложный пример из keycloak-nodejs-example , он использует пользовательское промежуточное ПО

middleware(logoutUrl) {
        // Return the Keycloak middleware.
        //
        // Specifies that the user-accessible application URL to
        // logout should be mounted at /logout
        //
        // Specifies that Keycloak console callbacks should target the
        // root URL.  Various permutations, such as /k_logout will ultimately
        // be appended to the admin URL.
        let result = this.keyCloak.middleware({
            logout: logoutUrl,
            admin: '/'
        });
        result.push(this.createSecurityMiddleware());
        return result;
    }


    createSecurityMiddleware() {
        return (req, res, next) => {
            if (this.permissions.isNotProtectedUrl(req)) {
                return next();
            }

            const permission = this.permissions.findPermission(req);
            if (!permission) {
                console.log('Can not find a permission for: %s %s', req.method, req.originalUrl);
                return this.keyCloak.accessDenied(req, res);
            }

            this.protectAndCheckPermission(req, res, next, permission.resource, permission.scope);
        };
    }


app.use(keyCloak.middleware('/logout'));

Источники

https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/keyCloakService.js#L69

https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/app.js#L60

Также вы можете обратиться к более сложной схеме защиты, используя (ресурс, область действия) в keycloak-nodejs-пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...