как получить токен начального доступа при регистрации клиента keycloak с помощью rest API?

я хочу создать клиента через rest api, для этого мне нужно передать токен начального доступа (сгенерированный регистрацией клиента в keycloak) с моим запросом. Мой вопрос заключается в том, как я могу сгенерировать этот первоначальный токен доступа через rest API. кто-нибудь может помочь? [это токен, который я передаю со своим URL-адресом][1] [1]: https://i.stack.imgur.com/ibvp6.png [вот скриншот ответа, когда я пытаюсь получить начальный токен доступа, необходимый для регистрации клиента, путем передачи тела количества параметров и срока действия с помощью токен входа для admin-cli в заголовке][2] [2]: https://i.stack.imgur.com/pDrNr.png


person TJ32    schedule 22.11.2019    source источник


Ответы (2)


С помощью простого GET REST-Request вы можете получить токен, который можно использовать для последующих запросов.

GET "grant_type=password&client_id=admin-cli&username=$USERNAME&password=$PASSWORD" "$HOST/auth/realms/$REALM/protocol/openid-connect/token"

как bash (должен быть установлен jq):

#get admin bearer token
AUTH_RESPONSE_KC_ADMIN=$(curl  --silent -d "grant_type=password&client_id=admin-    cli&username=$USERNAME&password=$PASSWORD" "$HOST/auth/realms/master/protocol/openid-connect/token")
if [[ $AUTH_RESPONSE_KC_ADMIN != *"access_token"* ]]; then
  echo "No access token for keycloak admin!"
  echo $AUTH_RESPONSE_KC_ADMIN
  exit -1
fi
TOKEN_KC_ADMIN=$(echo $AUTH_RESPONSE_KC_ADMIN | jq -r '.access_token')
AUTH_TOKEN_KC_ADMIN="Authorization: Bearer $TOKEN_KC_ADMIN"

Но этот токен доступа действителен только в течение некоторого времени (в зависимости от настроек keycloak).

Чтобы создать клиент с REST:

#use: create_client clientName
function create_client {
  CLIENT='{"enabled":true,"attributes":{},"redirectUris":["*"],"clientId":"'$1'","protocol":"openid-connect", "secret":"'$SECRET'","clientAuthenticatorType":"client-secret","publicClient":"false"}'
  curl -i --silent -d "$CLIENT" -H "$AUTH_TOKEN_KC_ADMIN" -H "$CONTENT_TYPE" $HOST/auth/admin/realms/$REALM/clients | head -1
}
person Julian Egner    schedule 22.11.2019
comment
я хочу создать клиента через службу регистрации клиентов в keycloak. - person TJ32; 22.11.2019
comment
для этого мне нужно получить первоначальный токен доступа, я нашел URL-адрес из документации keycloak. URL-адрес, который я передал, это .... /auth/admin/realms/master/clients-initial-access... тело {количество: 5, срок действия: 10} - person TJ32; 22.11.2019
comment
я также передаю токен входа в качестве заголовка с запросом .... но ответ - неизвестная ошибка 403 .... можете ли вы помочь - person TJ32; 22.11.2019
comment
может это поможет? stackoverflow.com/questions/46470477/ - person Julian Egner; 22.11.2019
comment
нет, это не сработало... я добавил снимок экрана с ответом на вопрос.... надеюсь, это будет полезно для вас, чтобы понять мою проблему - person TJ32; 25.11.2019
comment
Вы отправляете GET-запрос. Разве это не должно быть POST? keycloak.org/docs-api/8.0/rest- API/ - person Julian Egner; 25.11.2019

Чтобы получить токен начального доступа для регистрации клиента, сначала нам нужно установить клиентскую роль admin-cli как realm-{name} и выбрать из нее client-create. Затем получите токен носителя администратора для admin-cli и передайте его вместе с URL-адресом токена начального доступа.

person TJ32    schedule 30.11.2019
comment
То есть у вашей учетной записи администратора не было соответствующих привилегий? - person Julian Egner; 10.03.2020