java - tutorial - keycloak spring boot
Evite la página de inicio de sesión predeterminada de keycloak y use la página de inicio de sesión del proyecto (5)
Estoy trabajando en la creación de una aplicación web angular.js y en la búsqueda de cómo integrar keycloak
en el proyecto. He leído y visto muchos tutoriales y veo que la mayoría de ellos tienen usuarios que keycloak
sesión / se registran a través de la página de inicio de sesión predeterminada de keycloak
que luego redirige a la aplicación.
He diseñado mi propia página de inicio de sesión y registro que quiero usar. ¿Cómo los uso en lugar de keycloak
defecto. ¿Hay alguna API a la que pueda llamar o puede que mi servidor lo haga? También leí que hay adaptadores de resorte disponibles para keycloak, ¿puedo usarlos? Cualquier enlace a cualquier ejemplo sería bueno.
La segunda pregunta que tengo es mientras me registro, ¿puedo agregar más detalles de usuario como dirección, dob, género en keycloak
? Porque mi página de registro requiere esa información.
3 pasos:
- En el directorio keycloak / themes / create cree una carpeta con nombre, por ejemplo. mi tema
En la carpeta myTheme coloca tu página de inicio de sesión personalizada
(La estructura debe ser la misma que la de los temas base o keycloak, mi consejo es copiar el tema base, cambiarle el nombre y personalizarlo).
Vaya a la consola de administración de keycloak en Configuraciones de reino> Temas> Tema de inicio de sesión y seleccione myTheme .
Coloque su tema de inicio de sesión en el directorio de temas de Keycloak y, al iniciar la sesión de administración, cambie la configuración del tema de inicio de sesión y elija su tema de la lista desplegable. Su tema de inicio de sesión debe estar en formato de tema predeterminado de keycloak para que pueda crear el suyo. Por favor, consulte el tema predeterminado de keycloak y diseñe el suyo de acuerdo con eso.
Puede consultar la siguiente configuración del tema Keycloak
Expandiendo en los roles API
POST to your/keycloak/url/auth/realms/master/protocol/openid-connect/token
con datos:
{
client_id : ''Id_of_your_client'',
username : ''your_username'',
password : ''@#$%^&'',
grant_type : "password"
}
le dará el token de acceso inicial y el token de actualización
y
Publicar en la misma URL con
datos:
{
client_id : ''Id_of_your_client'',
// client_secret : ''optional depending on the type of client'',
grant_type : "refresh_token" ,
refresh_token : refresh_token_you_got_earlier
}
proporcionará la nueva actualización y los tokens de acceso. Estos tokens son los que keycloak verifica para la autorización / autenticación.
Puede hacer su propio inicio de sesión y enviar las credenciales a keycloak a través de una API REST y una vez que tenga el token de acceso, simplemente colóquelo en el encabezado de cualquier solicitud en curso a un recurso protegido por keycloak como
headers :{
Authorization : ''Bearer '' + access_token_you_got
}
Use el código de abajo si desea ir a la página de inicio de sesión de keycloak a través de java y obtener la respuesta:
String uri = "http://localhost:7080/auth/realms/{RealmName}/protocol/openid-connect/token";
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(uri);
post.setHeader("User-Agent",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
List<BasicNameValuePair> urlParameters = new ArrayList<BasicNameValuePair>();
urlParameters.add(new BasicNameValuePair("grant_type", "password"));
urlParameters.add(new BasicNameValuePair("client_id", {ClientName}));
urlParameters.add(new BasicNameValuePair("username", {UserName}));
urlParameters.add(new BasicNameValuePair("password", {Password}));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line1 = "";
while ((line1 = rd.readLine()) != null) {
result.append(line1);
}
System.out.println(result);
Si su nombre de usuario y contraseña son válidos, response.getStatusLine (). GetStatusCode () le dará el valor de 200 junto con accessToken y RefreshToken. De lo contrario, response.getStatusLine (). GetStatusCode () proporcionará el valor como 403 y los datos como: {"error": "invalid_grant", "error_description": "Credenciales de usuario no válidas"}
- Probablemente deberías apegarte a las formas del Keycloack. Traen buenas características (SSO, reinicio de pw, etc.) y son totalmente personalizables (a través de temas). Sin embargo, allí es posible obtener el token de acceso a través de la denominada concesión de acceso directo . Se puede hacer a través de Keycloak REST API .
- El almacenamiento de la información de usuario personalizada (género, trabajo, etc.) se realiza mediante atributos de usuario
Ambos temas están más o menos cubiertos en los documentos oficiales de Keycloak .