Usa IA para integrar Auth0
Usa IA para integrar Auth0
- Java Development Kit (JDK) 11 o posterior
- Apache Maven 3.x
- Un servidor de aplicaciones compatible con Java EE 8 (por ejemplo, WildFly 14+, Payara 5+ o GlassFish 5+)
- Una cuenta de Auth0: regístrate gratis
Primeros pasos
auth0-java-mvc-common y la API de seguridad de Java EE 8.
Crea un proyecto nuevo
Instala el SDK de Auth0
pom.xml por lo siguiente:javaee-api y javax.security.enterprise-api son provided porque el servidor de aplicaciones Java EE 8 aporta sus implementaciones en tiempo de ejecución.Configura tu aplicación de Auth0
- Dashboard
- Ve al Auth0 Dashboard y ve a Applications > Applications > Create Application.
- Introduce un nombre para tu aplicación (por ejemplo, “My Java EE App”).
- Selecciona Regular Web Applications como tipo de aplicación.
- Haz clic en Create.
- Abre la pestaña Settings.
- Toma nota de los valores de Domain, Client ID y Client Secret.
- Desplázate hacia abajo hasta Application URIs y configura:
- Allowed Callback URLs:
http://localhost:8080/callback - Allowed Logout URLs:
http://localhost:8080/
- Allowed Callback URLs:
- Haz clic en Save Changes.
Configura la autenticación
web.xml para almacenar la configuración de Auth0 como entradas de entorno JNDI. Reemplaza los valores de marcador de posición con el dominio, el ID de cliente y el Secreto del cliente de la configuración de la aplicación de Auth0. Crea un jboss-web.xml para configurar el dominio de seguridad JASPIC requerido por la API de seguridad de Java EE 8, un bean CDI Auth0AuthenticationConfig.java para leer la configuración desde JNDI, y un productor CDI Auth0AuthenticationProvider.java para construir el AuthenticationController.https:// en el valor de auth0.domain. Usa solo el dominio y la región. Por ejemplo: dev-abc123.us.auth0.com.Implementar la seguridad de Java EE
HttpAuthenticationMechanism para gestionar la autenticación. Debe proporcionar implementaciones personalizadas de varias interfaces de seguridad. La anotación @AutoApplySession permite que el contenedor cree una sesión para el usuario autenticado, de modo que siga conectado entre solicitudes.Añada la funcionalidad para iniciar y cerrar sesión
LoginServlet construye la URL de autorización de Auth0 y redirige al usuario. CallbackServlet gestiona la redirección después de la autenticación: Auth0AuthenticationMechanism intercepta primero esta solicitud para intercambiar el código de autorización por tokens, por lo que el servlet solo tiene que redirigir. LogoutServlet invalida la sesión y redirige al endpoint de logout de Auth0.Crear la interfaz de usuario
HomeServlet verifica si existe un principal autenticado y establece los claims del perfil en la solicitud. El ProfileServlet muestra el perfil del usuario y los claims JWT, o redirige al Login si no está autenticado.Ejecute la aplicación
Uso avanzado
Acceder a la información del perfil de usuario
Acceder a la información del perfil de usuario
Auth0JwtPrincipal está disponible mediante request.getUserPrincipal() en cualquier servlet. ProfileServlet muestra cómo acceder a los claims decodificados del ID token:name— nombre para mostrar completo del usuarioemail— dirección de correo electrónico del usuariopicture— URL de la foto de perfil del usuariosub— identificador único del usuario (ID de usuario de Auth0)
Personalizar los parámetros de Login
Personalizar los parámetros de Login
LoginServlet:.withAudience() para solicitar un token de acceso para una API específica. Use .withParameter() para cualquier parámetro de autorización adicional admitido por Auth0.Almacenar tokens para llamadas a API
Almacenar tokens para llamadas a API
Auth0AuthenticationMechanism para almacenar los tokens en la sesión:Iniciar sesión en una organización
Iniciar sesión en una organización
AuthenticationController con un ID o nombre de organización para restringir el Login a una Organización de Auth0 específica:org_id o org_name en el ID token para garantizar que coincida con la organización configurada.Recursos adicionales
Auth0 Java MVC SDK
Referencia de la API (JavaDoc)
Foro de la comunidad
Aplicación de ejemplo de Java EE
Problemas comunes
Error de discrepancia de estado en el callback
Error de discrepancia de estado en el callback
a0.invalid_state después del Login, significa que no se encontró la cookie de estado o que no coincide con el estado devuelto por Auth0.Verifica que:- La URL de devolución de llamada en el Auth0 Dashboard coincida exactamente con la URL que construye tu aplicación, incluido el número de puerto y el protocolo.
- Tu navegador no esté bloqueando cookies de terceros.
- Ningún proxy inverso ni middleware esté eliminando los encabezados
Set-Cookiede las respuestas.
buildAuthorizeUrl y handle, que utiliza almacenamiento de estado basado en cookies:Beans de CDI no detectados
Beans de CDI no detectados
- Tu servidor de aplicaciones sea compatible con CDI 2.0 (parte de Java EE 8)
- Todas las clases de seguridad (
Auth0AuthenticationConfig,Auth0AuthenticationProvider,Auth0JwtIdentityStore,Auth0AuthenticationMechanism) estén anotadas con@ApplicationScoped - Exista
src/main/webapp/WEB-INF/jboss-web.xmlcon el dominio de seguridadjaspitestconfigurado
jaspitest es necesario para que WildFly habilite la integración con JASPIC (Java Authentication SPI for Containers), de la que depende la API de seguridad de Java EE 8.Compatibilidad del servidor de aplicaciones
Compatibilidad del servidor de aplicaciones
javax (Java EE 8). Si usas un servidor que ya migró al espacio de nombres jakarta (Jakarta EE 9+), como WildFly 27+ o Payara 6+, el código no se compilará ni se ejecutará.Usa un servidor compatible con Java EE 8:- WildFly 14 a 26
- Payara 5
- GlassFish 5
- Open Liberty con características de Java EE 8
Aplicación de ejemplo
Aplicación de ejemplo de Java EE
src/main/webapp/WEB-INF/web.xml y, a continuación, ejecuta: