#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"
Я создал сценарии в этом репозитории для автоматизации этого процесса, чтобы сообщество могло использовать их по своему усмотрению.