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 '-------------------------------'
'Grafana, Keycloak' 카테고리의 다른 글
Grafana Cloudwatch DataSource Cloudwatch Add Error (0) | 2023.06.11 |
---|---|
Grafana Migration (0) | 2023.05.21 |
Grafana SSL 설정 / Keycloak SSL 설정 (0) | 2023.01.07 |
Grafana 사용을 위한 keycloak 설정 (1) | 2022.12.25 |
helm chart 를 사용한 Grafana Install (0) | 2022.12.18 |