Saltar al contenido

Keycloak

GitHub

Keycloak funciona mediante el proveedor genérico de OAuth2 integrado. No necesitas un proveedor nativo nuevo para Keycloak. Configura tu cliente de Keycloak como un cliente OpenID Connect y usa provider: 'oauth2' con un valor estable providerId, como keycloak.

En tu realm de Keycloak, crea o abre el cliente que usa tu app Capacitor:

  1. Usa el flujo de autorización code.
  2. Mantén PKCE habilitado en la configuración de la app.
  3. Registra cada redirect URI que use tu app, por ejemplo myapp://oauth/keycloak para móvil y una URL de callback HTTPS para web en producción.
  4. Usa scopes como openid profile email. Añade offline_access solo cuando tu realm y tu cliente estén configurados para emitir refresh tokens.

La URL de issuer exacta depende del despliegue. Los despliegues actuales de Keycloak suelen publicar los metadatos del realm en https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, pero algunas implementaciones incluyen una ruta base adicional. Usa la URL del emisor que muestra la configuración de endpoints OpenID de tu realm.

Prefiere issuerUrl para que el plugin pueda descubrir los endpoints de autorización, token y cierre de sesión desde los metadatos del realm:

import { SocialLogin } from '@capgo/capacitor-social-login';
const keycloakIssuer = 'https://keycloak.example.com/realms/my-realm';
await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
issuerUrl: keycloakIssuer,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email',
pkceEnabled: true,
resourceUrl: `${keycloakIssuer}/protocol/openid-connect/userinfo`,
},
},
});
const result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'keycloak',
},
});
console.log(result.result.idToken);
console.log(result.result.accessToken?.token);
console.log(result.result.resourceData);

Para los refresh tokens, solicita offline_access solo si tu realm y tu cliente de Keycloak permiten refresh tokens para esta app:

await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
issuerUrl: keycloakIssuer,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

Si el descubrimiento de OIDC está bloqueado o tu despliegue no expone los metadatos a la app, configura los endpoints directamente. Mantén la URL base tal cual la publica tu despliegue de Keycloak:

const keycloakRealmUrl = 'https://keycloak.example.com/realms/my-realm';
await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
authorizationBaseUrl: `${keycloakRealmUrl}/protocol/openid-connect/auth`,
accessTokenEndpoint: `${keycloakRealmUrl}/protocol/openid-connect/token`,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email',
pkceEnabled: true,
resourceUrl: `${keycloakRealmUrl}/protocol/openid-connect/userinfo`,
logoutUrl: `${keycloakRealmUrl}/protocol/openid-connect/logout`,
},
},
});

Keycloak no es uno de los IDs de proveedores preconfigurados en Auth Connect. Si ya usas SocialLoginAuthConnect, aún puedes inicializar el oauth2 proveedor genérico e iniciar sesión con provider: 'oauth2' además de providerId: 'keycloak'.

Consulta la Referencia del endpoint OpenID Connect de Keycloak para las rutas de descubrimiento y endpoints.

Si estás usando Keycloak para planificar los flujos de autenticación y de cuenta, conéctalo con Uso de @capgo/capacitor-social-login para la capacidad nativa en el uso de @capgo/capacitor-social-login, @capgo/capacitor-social-login para los detalles de implementación en @capgo/capacitor-social-login, @capgo/capacitor-passkey para el detalle de implementación en @capgo/capacitor-passkey, @capgo/capacitor-native-biometric para el detalle de implementación en @capgo/capacitor-native-biometric, y Autenticación de dos factores para el detalle de implementación en la autenticación de dos factores.