Solución:
Puede utilizar la API REST de administrador. La descripción detallada de la API correspondiente está disponible aquí. También puede utilizar la API contenedora de JAVA. A continuación, encontrará un par de ejemplos.
Ejemplo 1, DESCANSO:
Obtenga un token de acceso:
curl
-d "client_id=admin-cli"
-d "username=admin"
-d "password=secret"
-d "grant_type=password"
"http://localhost:8080/auth/realms/master/protocol/openid-connect/token"
Obtener todos los usuarios:
curl
-H "Authorization: bearer eyJhbGciOiJSUzI...."
"http://localhost:8080/auth/admin/realms/master/users"
Salida de muestra:
[
{
"id":"349f67de-36e6-4552-ac54-e52085109616",
"username":"admin",
"enabled":true,
...
},
{
"id":"08afb701-fae5-40b4-8895-e387ba1902fb",
"username":"lbalev",
"enabled":true,
....
}
]
Obtenga un usuario basado en la identificación de usuario:
curl
-H "Authorization: bearer eyJhbGciOiJSU...."
"http://localhost:8080/auth/admin/realms/master/users/349f67de-36e6-4552-ac54-e52085109616"
Ejemplo 2, API JAVA:
Obtenga un usado basado en ID usado:
public class TestUserAccess {
private static final String SERVER_URL = "http://localhost:8080/auth";
private static final String REALM = "master";
private static final String USERNAME = "admin";
private static final String PASSWORD = "secret";
private static final String CLIENT_ID = "admin-cli";
public static void main(String[] args) {
Keycloak keycloak = KeycloakBuilder
.builder()
.serverUrl(SERVER_URL)
.realm(REALM)
.username(USERNAME)
.password(PASSWORD)
.clientId(CLIENT_ID)
.resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build())
.build();
UsersResource usersResource = keycloak.realm(REALM).users();
UserResource userResource = usersResource.get("08afb701-fae5-40b4-8895-e387ba1902fb");
System.out.println(userResource.toRepresentation().getEmail());
}
}
Las dependencias relevantes para el ejemplo anterior son (tenga en cuenta que es posible que las versiones no estén actualizadas):
dependencies {
compile group: 'org.keycloak', name: 'keycloak-admin-client', version: '3.3.0.CR2'
compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.1.4.Final'
compile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.1.4.Final'
compile group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider', version: '3.1.4.Final'
}
El método también es simple, porque en la respuesta anterior se está obteniendo toda la información del usuario, lo cual no es la forma correcta porque en caso de que miles de usuarios sean llamadas pesadas.
así que simplemente pase el nombre de usuario como parámetro de consulta
OBTENER: http: // localhost: 8080 / auth / admin / realms / {real-name} / users? Username = testUser
asegúrese de que el token de acceso de administrador de usuario para la llamada