Невозможно создать область Keycloak через API остальных администраторов: неподдерживаемый тип носителя - PullRequest
0 голосов
/ 25 июня 2019

Я использую Keycloak 4.8.3, и я пытаюсь создать новую область и пользователей, используя API администратора.Согласно документации , похоже, что это вызов импорта.Предполагая, что я запускаю keycloak на localhost, URL-адрес API должен выглядеть как http://localhost:8080/auth/.Я также немного смущен документом, который не указан в точном пути, отличном от POST /, поэтому я не уверен, что он POST /admin/realms.

. Я начал работать над этим, используя ansible, и, поскольку нетДобравшись до головы, я повернулся к простому отдыху.Я использовал главное имя пользователя и пароль для получения токена, вызывающего /auth/realms/master/protocol/openid-connect/token.Это похоже на приведенный ниже запрос / ответ POST, я либо вызываю неправильный URL-адрес, либо выполняю вызов с неправильным Content-Type (попытался отправить только {"realm": "somerealm"} с закодированным типом url формы, а keycloak только возвращает OK и т. Д., Но ничего не получаетсясоздано).

> POST /auth/ HTTP/1.1
> Host: localhost:8080
> User-Agent: insomnia/6.5.4
> Content-Type: application/json
> Authorization: bearer eyJhbGcisomelongbearertoken"
> Accept: */*
> Content-Length: 373

| {
|   "realm": "somerealm",
|   "displayName": "somerealm",
|   "enabled": true,
|   "users": [
|       {
|           "email": "apigateway@example.com",
|           "enabled": true,
|           "firstName": "APIGateway",
|           "lastName": "SomeProject",
|           "usename": "api-manager",
|           credentials: [
|               {
|                   "temporary": false,
|                   "type": "password",
|                   "value": "somedecentpassword"
|               }
|           ]
|       }
|   ]
| }

* upload completely sent off: 373 out of 373 bytes

< HTTP/1.1 415 Unsupported Media Type
< Date: Tue, 25 Jun 2019 11:13:44 GMT
< Content-Length: 0
< Connection: keep-alive

Может кто-нибудь намекнуть на вопрос выше, я нахожусь на этом в течение последних 24 часов, и я думаю, что мне нужно приехать сюда и кричать о помощи.Заранее спасибо

1 Ответ

1 голос
/ 02 июля 2019

1) Находясь в веб-консоли Keycloak, перейдите на вкладку «Клиенты» и создайте новый конфиденциальный клиент (назовите его realm-creator), убедитесь, что для параметра Service Accounts Enabled установлено значение ON

.

2) Перейдите на вкладку Service account roles и назначьте роль create-realm (из группы Realm roles) своему клиенту.

3) Получить токен доступа (я использую curl и jq )

KCHOST=https://yourkeycloak.com
REALM=master
CLIENT_ID=realm-creator
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4) Поместите свое царство в realm.json

5) Наконец, вызовите конечную точку API REST:

curl -v -X POST \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @realm.json \
  $KCHOST/auth/admin/realms

P.S. Кстати, для отладки я только что написал инструмент CLI под названием brauzie , который поможет вам получить и проанализировать ваши токены JWT (области, роли и т. д.). Это могло бы использоваться как для публичных, так и для конфиденциальных клиентов. Вы могли бы также используйте Почтальон и https://jwt.io, если хотите.

HTH:)

...