Это руководство по настройке Express и Keycloak для защиты веб-маршрутов. Предпосылки Keycloak - это решение для управления идентификацией и доступом с открытым исходным кодом, которое упрощает защиту приложений или микросервисов с минимальным использованием кода или без него. Express - это минималистичный и гибкий фреймворк для веб-приложений Node.js. Работа с официальной документацией Keycloak может занять некоторое время, поскольку документация обширна и охватывает различные варианты использования. Это краткое руководство с минимальной настройкой.

Цель состоит в том, чтобы создать приложение Express, которое использует Keycloak для защиты маршрута «/ test». Вход в систему и настройки пользователя контролируются keycloak. Маршрут по умолчанию / не защищен. Маршрут / logout прерывает сеанс кейлоака.

Чтобы установить keycloak-connect npm в вашем экспресс-приложении, используйте следующую команду

npm install keycloak-connect --save

Настройте экспресс-сервер

Вам необходимо импортировать keycloak-connect и экспресс-сессии в ваше экспресс-приложение.

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

Затем настройте сеанс для использования memoryStore. Настройте промежуточное ПО keycloak для использования хранилища памяти сеанса.

var memoryStore = new session.MemoryStore();                       
var keycloak = new Keycloak({ store: memoryStore });
//session                       
app.use(session({                                 secret:'thisShouldBeLongAndSecret',                         
resave: false,                         
saveUninitialized: true,                         
store: memoryStore                       
}));
                                                         app.use(keycloak.middleware());

Затем вы можете использовать keycloak.protect на своих защищенных маршрутах. Это проверит, вошел ли пользователь в систему на сервере keycloak и перенаправит его на маршрут. Если пользователь не вошел в систему, сервер будет перенаправлен на страницу входа в keycloak. Пользователь может создавать новые учетные записи, щелкнув ссылку регистрации на странице входа. Это создает новых пользователей на сервере Keycloak.

//route protected with Keycloak 
app.get(‘/test’, keycloak.protect(), function(req, res){ res.render(‘test’, {title:’Test of the test’}); 
});

Установите маршрут выхода, чтобы использовать промежуточное программное обеспечение keycloak для завершения сеанса.

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

См. Следующую суть для полной реализации server.

Установка примера

Клонируйте это репо и cd в новый каталог, запустите npm install, есть некоторые дополнительные вещи, такие как представления в репо.

Демо-видео

Вы можете увидеть Keycloak и сервер Express.js в действии по адресу

Настройка сервера Keycloak

Для использования этого экспресс-приложения вам потребуется запустить сервер Keycloak. Keycloak можно загрузить и запустить локально или из контейнера докеров, см. Https://hub.docker.com/r/jboss/keycloak/ для получения дополнительной информации.

Загрузите Keycloak по адресу http://www.keycloak.org/downloads.html. Чтобы запустить его локально, распакуйте загруженный файл и запустите standalone.sh

./keycloak-unzip-directory/bin/standalone.sh

Затем вы можете получить доступ к серверу Keycloak из браузера, используя следующий URL-адрес

http://localhost:8080/auth/

Вы попадете на экран начального пароля для администратора Keycloak.

Для получения дополнительной информации о настройке Keycloak см. Следующее руководство www.keycloak.org/docs/latest/getting_started/index.html

Затем вам нужно настроить область http://www.keycloak.org/docs/latest/getting_started/index.html#creating-a-realm-and-user. Войдите в консоль администратора Keycloak, наведите указатель мыши на верхний левый угол, нажмите Добавить область и дайте ей имя.

Чтобы использовать адаптер Node.js, сначала необходимо создать клиент для своего приложения в консоли администрирования Keycloak. Настройте клиент Open ID Connect http://www.keycloak.org/docs/latest/server_admin/index.html#_clients. В вашем новом мире нажмите Клиенты и Создать и дайте своему клиенту имя / идентификатор.

Адаптер поддерживает общедоступный, конфиденциальный и однонаправленный доступ. Какой из них выбрать, зависит от сценария использования. В этом случае я выбрал общедоступный с помощью openid-connect.

Вам нужно будет определить действительный URL-адрес перенаправления.

После создания клиента перейдите на вкладку «Установка», выберите «Keycloak OIDC JSON для параметра формата» и нажмите «Загрузить».

Скачанный файл keycloak.json следует поместить в корневую папку вашего проекта. Пример файла keycloak.json

{
  "realm": "test",
  "auth-server-url": "http://localhost:8080/auth",
  "ssl-required": "external",
  "resource": "keycloak-express", 
  "public-client": true,
  "confidential-port": 0
}

Вот и все ваши веб-маршруты Express будут защищены Keycloak. Для получения дополнительной информации см. Http://www.keycloak.org/docs/latest/securing_apps/index.html#_nodejs_adapter.

"Мой блог"