Configurar cliente Keycloak usando JWT firmado
Tabla de contenidos
- Introducción
- Paso 1: Acceder al panel de administración de Keycloak
- Paso 2: Crear un cliente de OpenID Connect
- Paso 3: Configurar el cliente de OpenID Connect
- Paso 4: Configurar los alcances (scopes) y los roles
- Paso 5: Generar el material de clave
- Paso 6: Extraer la clave privada
- Paso 7: Finalizar la autenticación por JSON Web Token
- Conclusión
- Recursos adicionales
Introducción
En este artículo, aprenderemos cómo agregar un cliente de OpenID Connect a Keycloak y configurarlo para autenticación mediante JSON Web Token (JWT). Keycloak es una popular solución de gestión de identidad y acceso de código abierto que proporciona características de seguridad robustas para aplicaciones web y servicios RESTful. La autenticación basada en JWT es una forma segura y eficiente de autenticar y autorizar a los usuarios en aplicaciones y servicios. Sigue los pasos a continuación para obtener una guía detallada sobre cómo configurar correctamente un cliente de OpenID Connect en Keycloak y utilizar JWT para autenticación.
Paso 1: Acceder al panel de administración de Keycloak
Para comenzar, accede al panel de administración de Keycloak en tu navegador web. Esto normalmente se logra ingresando la URL del servidor Keycloak seguida de "/admin" (por ejemplo, "https://tu-servidor-keycloak.com/admin"). Asegúrate de tener los privilegios de administrador necesarios para realizar acciones de configuración.
Paso 2: Crear un cliente de OpenID Connect
Una vez que hayas accedido al panel de administración de Keycloak, sigue los siguientes pasos para crear un nuevo cliente de OpenID Connect:
- Navega a la pestaña "Realm" y selecciona el realm en el que deseas crear el cliente.
- Haz clic en la pestaña "Clients" en la barra lateral izquierda.
- Haz clic en el botón "Create" para crear un nuevo cliente.
- Completa los detalles del cliente, como el "Client ID", que debe ser significativo y fácil de identificar. Asegúrate de que el "Client Protocol" se establezca en "OpenID Connect".
- Haz clic en el botón "Save" para guardar la configuración y acceder a la pantalla de configuración inicial del cliente.
Paso 3: Configurar el cliente de OpenID Connect
Una vez que hayas completado el paso anterior y estés en la pantalla de configuración inicial del cliente, sigue los siguientes pasos para configurar el cliente de OpenID Connect correctamente:
- Establece el "Access Type" en "Confidential". Esto habilitará características adicionales para el cliente.
- Desactiva los flujos OAuth que permiten la autenticación de usuarios.
- Activa el flujo OAuth que permite el uso de "Service Accounts", también conocido como "Client Credentials Grant".
- Desplázate hacia abajo y asegúrate de guardar los cambios.
Paso 4: Configurar los alcances (scopes) y los roles
Los alcances y roles determinan los permisos y privilegios asociados a los tokens de acceso emitidos para el cliente. Sigue los siguientes pasos para configurar los alcances y los roles necesarios:
- Navega a la pestaña "Client Scopes" en la barra lateral izquierda.
- Asegúrate de que los alcances requeridos, como "stigma" y "watcher", estén presentes en la lista de "Default Client Scopes" del cliente.
- Asegúrate de que el "Roles" claim esté presente en los "Default Client Scopes" seleccionados.
- Guarda los cambios para que los alcances y roles se apliquen al cliente.
Paso 5: Generar el material de clave
En este paso, generaremos el material de clave necesario para la autenticación basada en JWT. Sigue los siguientes pasos para generar el material de clave:
- Navega a la pestaña "Credentials" en la pantalla de configuración del cliente.
- Si deseas utilizar un par de claves existente, puedes importarlo haciendo clic en el botón correspondiente. De lo contrario, genera un nuevo par de claves haciendo clic en el botón "Generate New Key" y selecciona el formato de archivo "PKCS12".
- Proporciona una contraseña de clave y una contraseña de almacenamiento. La contraseña de almacenamiento es necesaria para guardar el archivo con el par de claves.
- Haz clic en el botón "Generate" para generar el material de clave. Puedes guardar el archivo PKCS12 en tu disco si lo deseas.
Paso 6: Extraer la clave privada
Si deseas utilizar una clave privada en formato PEM en lugar del archivo PKCS12, deberás extraerla del archivo PKCS12 generado en el paso anterior. Sigue los siguientes pasos para extraer la clave privada en formato PEM:
- Utiliza herramientas como OpenSSL para extraer la clave privada. Por ejemplo, ejecuta el siguiente comando en una terminal:
openssl pkcs12 -in ruta/al/archivo.p12 -nokeys -out ruta/al/archivo.pem
.
- Se te pedirá la contraseña de almacenamiento. Proporciónala para continuar.
- A continuación, se te pedirá una frase de contraseña para proteger la clave privada en el archivo PEM resultante. Ingresa una frase de contraseña y confírmala.
- Ahora tendrás un archivo PEM que contiene la clave privada necesaria para la autenticación basada en JWT.
Paso 7: Finalizar la autenticación por JSON Web Token
Con el cliente de OpenID Connect correctamente configurado y el material de clave generado, ahora estás listo para utilizar JSON Web Tokens para autenticación en tu aplicación o servicio. Consulta la documentación o los recursos adicionales para obtener más información sobre cómo configurar y utilizar el material de clave en tu aplicación específica.
Conclusión
La autenticación mediante JSON Web Tokens es una forma segura y eficiente de autenticar usuarios en aplicaciones y servicios. Keycloak proporciona una solución fácil de usar para agregar autenticación basada en JWT a tus aplicaciones y servicios. Siguiendo los pasos detallados en este artículo, podrás configurar correctamente un cliente de OpenID Connect en Keycloak y utilizar JSON Web Tokens para autenticación en tu propia aplicación.
Recursos adicionales
FAQ
Q: ¿Por qué es importante utilizar JWT para autenticación en Keycloak?
A: Utilizar JWT para autenticación en Keycloak proporciona una capa adicional de seguridad y eficiencia en la autenticación de usuarios. Los JWT son tokens firmados digitalmente y contienen información verificable sobre la identidad y los permisos del usuario, lo que los hace ideales para la autenticación en aplicaciones y servicios web.
Q: ¿Cuál es la diferencia entre los flujos OAuth para autenticación de usuarios y el flujo "Client Credentials Grant"?
A: Los flujos OAuth para autenticación de usuarios son utilizados cuando se desea autenticar y autorizar a usuarios específicos en una aplicación. Estos flujos involucran interacciones con el usuario, como iniciar sesión y dar permisos. Por otro lado, el flujo "Client Credentials Grant" se utiliza cuando no se requiere la autenticación de un usuario específico, sino que se necesita autenticar al cliente mismo. Este flujo es adecuado para casos de uso en los que se necesita acceder a recursos protegidos sin la intervención de un usuario.
Q: ¿Qué es un alcance (scope) en Keycloak?
A: En Keycloak, un alcance (scope) es un permiso o privilegio asociado a un token de acceso. Los distintos alcances determinan qué recursos y acciones están permitidos para un cliente en particular. Al configurar los alcances en Keycloak, puedes controlar los permisos y accesos específicos que un cliente tendrá en tu aplicación o servicio.
Q: ¿Por qué es importante configurar los roles en el cliente de OpenID Connect?
A: Los roles son una parte importante del sistema de autorización en Keycloak. Configurar los roles en el cliente de OpenID Connect permite asignar permisos y privilegios específicos a los usuarios autenticados mediante JWT. Al asignar roles a los usuarios, puedes controlar qué acciones y recursos están disponibles para ellos en tu aplicación o servicio.
Q: ¿Es seguro extraer la clave privada del archivo PKCS12?
A: Extraer la clave privada del archivo PKCS12 es seguro siempre y cuando mantengas adecuadas medidas de seguridad para proteger tanto el archivo PKCS12 como la clave privada en formato PEM resultante. Asegúrate de utilizar contraseñas fuertes y mantener los archivos en ubicaciones seguras y protegidas.