How to get client secret via Keycloak API?
I think your authentication it's not working.
- You need a token. You can generate using OpenID (see docs).
- With the token (by header Authorization), you can do request to API.
Example:
Get the token
data = {"username": "username", "password": "password",
"client_id": "client_id", "client_secret": "client_secret",
"grant_type": "password"}
token = request.post("https://{server-url}/"realms/{realm-name}/protocol/openid-connect/token", data=data)
Request to API
response = requests.get("https://mylink.com/auth/admin/realms/{myrealm}/clients/{myclientid}/client-secret", data=data, headers= {"Authorization": "Bearer " + token.get('access_token'), "Content-Type": "application/json"})
{id} in the URL is not clientId, it is different from clientId.
it is keycloak unique id ( which is uuid
) some thing like 628e4b46-3d79-454f-9b1c-e07e86ee7615
GET /admin/realms/{realm}/clients/{id}/client-secret
You can get id using this api , where it returns list of ClientRepresentation, which has both Id and clientId, use Id
GET /{realm}/clients
`
You can't get client_secret
for public clients. Your client should have 'access_type` = 'confidential'
- Go to
CLIENTS
section of your realm admin panel (<protocol>://<host>:<port>/auth/admin/master/console/#/realms/<your realm>/clients/<your client code>
) - Change Access Type to
confidential
- Press 'SAVE'
- Go to the "Credentials" tab
- Make sure that 'Client Authenticator' = 'Client Id and Secret'
- Voila! Here's your client secret:
UPD P.S. client_secret
retrieving using API is possible through another client (which should have role for client info view)