Невозможно получить секрет клиента с помощью keycloak admin cli endpoint

#java #spring #spring-boot #keycloak #keycloak-services

#java #весна #весенняя загрузка #keycloak #keycloak-сервисы

Вопрос:

Я использую следующую конечную точку: http://localhost:8083/auth/admin/realms/Myrealm/clients/ltiobf/client-secret

и получение ответа в виде

 {
  "error": "HTTP 401 Unauthorized"
}
    
  

Я получаю токен доступа от Keycloak, используя следующее:

 curl --location --request POST 'http://localhost:8083/auth/realms/Myrealm/protocol/openid-connect/token' 
    --header 'cache-control: no-cache' 
    --header 'content-type: application/x-www-form-urlencoded' 
    --header 'postman-token: de7d68a0-5b21-1405-ed1a-9b7a6cb0da25' 
    --header 'Cookie: JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistrate; XSRF-TOKEN=c620bf0f-a46a-41b4-bc30-558e96422123; JSESSIONID=gDz-86p4prmLkl12O7kx-8FdIcSAErBYhKitm5r8; JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistratehq' 
    --data-urlencode 'client_id=ltiobf' 
    --data-urlencode 'username=sairaj1417' 
    --data-urlencode 'password=sairaj123' 
    --data-urlencode 'grant_type=password'
  

и передать его в качестве параметра аутентификации в запросе GET для client secret.

Ответ №1:

Токен доступа должен быть запрошен от имени пользователя с соответствующими разрешениями на запрос токенов, опущенных Keycloak:

 curl    -d "client_id=admin-cli" 
        -d "username=$ADMIN_NAME" 
        -d "password=$ADMIN_PASSWORD" 
        -d "grant_type=password" 
        https://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token
  

в admin-cli качестве клиента ID . Из этого ответа (т. Е. Объекта токена Keycloak) извлеките токен доступа, назовем $ACCESS_TOKEN его .

Если у вас есть доступ к Admin консоли, вы можете легко получить client secret , перейдя к:

  • ваш Realm ;
  • затем нажмите clients и выберите свой client ;
  • Перейдите на вкладку credentials , где она у вас есть.

Однако, если вы хотите сделать это с помощью Keycloak Rest API, сначала вам нужно знать ID имя клиента, которое можно получить с помощью :

 curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients?clientId=<CLIENT_ID>  
            -H "Authorization: bearer $ACCESS_TOKEN"
  

<CLIENT_ID> основном это имя клиента) из этого ответа вам нужно извлечь желаемое ID от клиента. При этом ID вы можете извлечь клиент secret , используя:

 curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients/<ID of the client>/client-secret  
            -H "Authorization: bearer $ACCESS_TOKEN"
  

Я создал сценарии в этом репозитории для автоматизации этого процесса, чтобы сообщество могло использовать их по своему усмотрению.