The following software is required to work with codebase and build it locally:
- Git 2.2.1 or later
- JDK 17 or later, e.g. OpenJDK
- Docker Engine or Docker Desktop 1.9 or later
- Apache Maven 3.8.4 or later
(or invoke the wrapper with./mvnw
for Maven commands) - CURL 7.79.1 or later
- JQ 1.6 or later
See the links above for installation instructions on your platform. You can verify the versions are installed and running:
$ git --version
$ javac -version
$ mvn -version
$ docker --version
$ curl --version
$ jq --version
Возвращает количество сессий для каждого пользователя посредством API метода.
Для тестирования необходимо собрать проект и запустить проект в Docker:
$ chmod +x sh/run
$ sh/run
В результате запустится контейнер Docker
.
В Realm test
будет добавлен пользователь с параметрами:
username : test
password : test
Чтобы получить токен пользователя выполняем скрипт:
$ curl -X "POST" "https://localhost:8443/realms/test/protocol/openid-connect/token" \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'User-Agent: KC-Rest/0.0.1 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 iOS/9B206 KC-Rest/0.0.1' \
--data-urlencode "client_id=test-client" \
--data-urlencode "client_secret=eucQDUfNCRhf0g05eKg1fvBmfQTI3awu" \
--data-urlencode "grant_type=password" \
--data-urlencode "password=test" \
--data-urlencode "scope=openid" \
--data-urlencode "username=test"
В результате получим ответ :
{
"access_token": "${ACCESS_TOKEN}",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "${REFRESH_TOKEN}",
"token_type": "Bearer",
"id_token": "${ID_TOKEN}",
"not-before-policy": 0,
"session_state": "34007ddb-8891-43a4-94fd-59f1a3ac76bb",
"scope": "openid profile email"
}
Здесь нам нужен только ${ACCESS_TOKEN}
.
Чтобы получить количество сессий для каждого пользователя выполняем скрипт :
$ curl "https://localhost:8443/realms/test/kc-spi-rest/sessions-count" \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ${ACCESS_TOKEN}'
В результате получим ответ :
{
"${USERNAME}": ${SESSION_COUNT}
}
Например если создали только одного пользователя test
- ответ будет таким :
{
"test": 1
}
После сборки проекта скриптом:
$ chmod +x sh/run
$ sh/run
в директории target
находится артефакт kc_spi.jar
Этот артефакт нужно разместить на сервере Keycloak в директории /opt/keycloak/providers/
$ docker cp target/kc_spi.jar ${CONTAINER_NAME}:/opt/keycloak/providers/
, где ${CONTAINER_NAME}
- имя контейнера с Keycloak
Для получения количества сессий используется GET
запрос.
$ curl "https://${KC_HOST}/realms/${REALM_NAME}/kc-spi-rest/sessions-count" \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ${JWT_TOKEN}'
, где
${KC_HOST}
- хост keycloak
${REALM_NAME}
- имя realm
${JWT_TOKEN}
- access token
Ответ возвращается в виде :
{
"${USERNAME}":${SESSION_COUNT}
}
, где
${USERNAME}
- имя пользователя
${SESSION_COUNT}
- количество сессий