← Навигация по документации

Run secured archive services on a single host

Регистрация curl как OIDC-клиента в Keycloak

Войдите в консоль администратора Keycloak Realm с пользователем/паролем root/changeit по адресу
https://<docker-host>:8843/admin/dcm4che/console.

Примечание : - Замените <docker-host> на имя хоста docker-хоста. - Если вы изменили имя realm по умолчанию dcm4che через переменную окружения REALM_NAME для контейнеров Keycloak и Archive, замените dcm4che на это значение в URL. - https://<docker-host>:8843/admin/dcm4che/console применимо только для Keycloak версии 18.0 и выше и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH. - Если используются более ранние версии Keycloak или если KC_HTTP_RELATIVE_PATH установлен в /auth для Keycloak v18.0+, используйте https://<docker-host>:8843/auth/admin/dcm4che/console

  1. Создайте OIDC-клиента с curl в качестве Client ID в разделе General Settings

  1. Включите ON опцию Client Authentication и выберите Service accounts roles в Authentication flow в разделе Capability Config

  1. Добавьте / в качестве Valid redirect URIs в разделе Login Settings и нажмите Save.

  1. Сохранённые настройки можно просмотреть как

  1. Добавьте роль user на вкладке Service account roles, используйте Assign role, чтобы назначить роль user этому клиенту

  1. Сохраните Secret с вкладки Credentials для последующего использования.

Запрос access token с использованием OAuth 2.0 Client Credentials Grant

Замените <docker-host> ниже на имя хоста docker-хоста.

$ RESULT=`curl -k --data "grant_type=client_credentials&client_id=curl&client_secret=jDF89hTSD4oFx5vlB3uJsc6eTvJuBWL6" https://<docker-host>:8843/realms/dcm4che/protocol/openid-connect/token`
$ echo $RESULT | python -m json.tool
{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJFZE5pZGhoRFIzMnZfZVJTSnhHVjZUbWlUMU85Wjd1bWw3cjFleEJ2Y1kwIn0.eyJleHAiOjE2ODE0ODA1MjUsImlhdCI6MTY4MTQ4MDIyNSwianRpIjoiMGNmZGQwYjUtODhmOC00MTg4LWI3NjMtYjYyNWFiZTBjNmI4IiwiaXNzIjoiaHR0cHM6Ly92cmluZGEtcGM6ODg0My9yZWFsbXMvZGNtNGNoZSIsInN1YiI6IjI0Yzc4ZTlkLTM2YzMtNDlhMS1iZjVkLTE4MGU3ZmUzN2YzMiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImN1cmwiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1kY200Y2hlIiwidW1hX2F1dGhvcml6YXRpb24iLCJ1c2VyIl19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJjbGllbnRIb3N0IjoiMTkyLjE2OC4yLjIyMyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SWQiOiJjdXJsIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWN1cmwiLCJjbGllbnRBZGRyZXNzIjoiMTkyLjE2OC4yLjIyMyJ9.Sb-XbdGAXyUIZW4rgW1b9l7rLv5t2k_2DYohCJy7GkcuQdI6U20qykATxyDtSFDAiWCqBBeUsOE_LXSowOnMwliPnuNXndvJv8iMbWJYztPNRPPPTB4cqKW50fti7v5vfHrqqH3asbrIIy-irN7DYgAOEsrYGVntiq9f8RIJ1TAL-2QRwzIN5u14WennXfHPjLD92HWShs7-CeR5h4XInQUf0rl-Qm50H-mFHpzb861h0LEq45sq697amc0oJr0tTwBitUnLGeWynX9Wzgx_gDy9mpwrVZSGfZEV6oBL5s4E7ymc477kZOHyQ51-zw_zoEMVJW96MjZQj9MsFgl04A",
    "expires_in": 300,
    "not-before-policy": 0,
    "refresh_expires_in": 0,
    "scope": "profile email",
    "token_type": "Bearer"
}

Примечание : - https://<docker-host>:8843/realms/dcm4che/protocol/openid-connect/token применимо только для Keycloak v18.0+ и если используется значение по умолчанию KC_HTTP_RELATIVE_PATH. - Если используются более ранние версии Keycloak или если KC_HTTP_RELATIVE_PATH установлен в /auth для Keycloak v18.0+, то https://<docker-host>:8843/auth/realms/dcm4che/protocol/openid-connect/token

Использование токена в HTTP-запросах к защищённому веб-приложению

Замените <docker-host> ниже на имя хоста docker-хоста.

$ TOKEN=`echo $RESULT | sed 's/.*access_token":"\([^"]*\).*/\1/'`
$ curl -H "Authorization: Bearer $TOKEN" http://<docker-host>:8080/dcm4chee-arc/aets/DCM4CHEE/rs/studies/count
{"count":0}

Просмотр содержимого JSON Web Token (JWT)

$ JWT=`echo $RESULT | sed 's/[^.]*.\([^.]*\).*/\1/'`
$ echo $JWT | base64 -d | python -m json.tool
base64: invalid input
{
    "acr": "1",
    "azp": "curl",
    "clientAddress": "192.168.2.223",
    "clientHost": "192.168.2.223",
    "clientId": "curl",
    "email_verified": false,
    "exp": 1681480525,
    "iat": 1681480225,
    "iss": "https://<docker-host>:8843/realms/dcm4che",
    "jti": "0cfdd0b5-88f8-4188-b763-b625abe0c6b8",
    "preferred_username": "service-account-curl",
    "realm_access": {
        "roles": [
            "offline_access",
            "default-roles-dcm4che",
            "uma_authorization",
            "user"
        ]
    },
    "scope": "profile email",
    "sub": "24c78e9d-36c3-49a1-bf5d-180e7fe37f32",
    "typ": "Bearer"
}

<docker-host> в выводе выше должен быть именем хоста docker-хоста.