keycloak 은 콜솔에서 직접 계정 생성/조회/삭제 등여러가지 기능이 가능하지만, API 로도 이를 사용 할 수 있다.

 

[API 문서]

https://www.keycloak.org/docs-api/15.0/rest-api/index.html#_accesstoken

 

Keycloak Admin REST API

This is a REST API reference for the Keycloak Admin Version information URI scheme Host: localhost:8080 BasePath: /auth Schemes: HTTP

www.keycloak.org

이중 대표적인 API 몇가지만 사용해 보자


환경

Keycloak : jboss/keycloak

https://hub.docker.com/r/jboss/keycloak/

 

Docker

 

hub.docker.com


1.  jboss/keycloak docker 설치

[code]
sudo docker run -e KEYCLOAK_USER=<USERNAME> -e KEYCLOAK_PASSWORD=<PASSWORD> jboss/keycloak

[code sample]
sudo docker run -p 8080:8080 -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak

- 8080포트로 포트포워딩
- -d 옵션으로 백그라운드 실행
- -e 환경 변수로 IP/PW = admin/admin 설정

 

2. 설치 확인

sudo docker ps | grep keycloak

- 'CONTAINER ID' 를 메모해 두자

[결과값]

 

3.  Keycloak IP 확인

sudo docker exec -it dee207029f5f /bin/bash
> hostname -i

 

4. Container Network Test

curl {keycloak container IP}:8080
curl {localhost IP}:8080

[결과값]

 

5. Keycloak Web Browser 접속

http://[IP]:8080
ID/PW = admin/admin

 

 

6. admin-cli Client 설정 변경

  • Master - Clients - admin-cli  - Settings - Service Accounts Enabled 를 ON 으로 변경 후 저장
  • 저장하고나면 Service Account Roles 탭이 생기는데 이곳에서 권한 설정
  • Service Account Roles - Client Roles - 'master-realm' 에서 권한 추가
  • 필요한 권한만 추가하면 되나, 이 글에서는 모든 권한 추가
  • Master - Clients - admin-cli  - Settings - Access Type 을 confidential 로 변경 후 저장
  • Master - Clients - admin-cli  - Credentials - Secret 을 저장[토큰 발행시 사용]

 

7. 토큰발행 API

curl -k \
-d "client_id=admin-cli" \
-d "client_secret={client_secert}" \
-d "grant_type=client_credentials" \
-X POST "{IP}/auth/realms/master/protocol/openid-connect/token"

[결과값]

  • access_token, expires_in, refresh_expires_in, token_type 등 여러 값이 나오는데 이중 access_token 만 저장
  • expires 같은경우 master-token 에서 설정 변경 가능

8. 전체 유저 확인

curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {TOKEN}" \
-X GET "{IP}/auth/admin/realms/master/users"

 

 

9. 특정 유저 확인

curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {TOKEN}" \
-X GET "{IP}/auth/admin/realms/master/users?username={username}"

 

 

10. 유저 생성

curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {TOKEN}" \
-X POST "{IP}" \
-d "{"email":"test@keycloak.com", "enabled":"true", "username":"app-user", "credentials": [{"type":"password", "value":"1234", "temporary": false}]}"

 



 

이 외 여러 API 들은 keycloak API 에서 확인하여 사용하면 된다.

 

[참고자료]

  • keycloak Token 을 사용하여 특정인원 조회 하는 쉘 스크립트
  • jq -r 구문을 통해서 access_token 값을 val1 에 저장
  • $1 을 사용해서 특정 유저 조회 [쉘 실행시 'sh keycloak.sh username'] 
#!bin/bash

echo ''
val1=`curl -k \
-H "Content_Type: application/json" \
-d "client_id=admin-cli" \
-d "client_secret={secret key}" \
-d "grant_type=client_credentials" \
-X POST "{ip:port}/auth/realms/master/protocol/openid-connect/token" | jq -r '.access_token'`

echo '---------Token value-------'
echo ''
echo $val1
echo ''
echo '---------------------------'


echo ''
echo '---------Search All User-------'
echo ''
curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $val1" \
-X GET "{ip:port}/auth/admin/realms/master/users"
echo ''
echo ''
echo '-------------------------------'


echo ''
echo ''
echo '--------Search One User-------'
echo ''
curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $val1" \
-X GET "{ip:port}/auth/admin/realms/master/users?username=$1"

echo ''
echo ''
echo '-------------------------------'

 

+ Recent posts