Saltar al contenido

Keycloak

GitHub

Keycloak funciona a través del proveedor de OAuth2 genérico incorporado. No necesita un nuevo proveedor nativo para Keycloak. Configure su cliente Keycloak como un cliente de OpenID Connect y utilice provider: 'oauth2' con un flujo estable providerId, como keycloak.

En su reino Keycloak, cree o abra el cliente utilizado por su aplicación Capacitor:

  1. Utilice el flujo de autorización code.
  2. Mantenga habilitado PKCE en la configuración de la aplicación.
  3. Registre cada URI de redirección que utiliza su aplicación, por ejemplo myapp://oauth/keycloak para dispositivos móviles y una URL de llamada HTTPS para producción web.
  4. Usar ámbitos como openid profile email. Agregar offline_access solamente cuando su reino y cliente estén configurados para emitir tokens de refresco.

La URL de emisor exacta es específica de la implementación. Las implementaciones de Keycloak actuales suelen publicar metadatos de reino en https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, pero algunas implementaciones incluyen un camino base adicional. Use la URL de emisor mostrada por la configuración de fin de punto de acceso de OpenID de su reino.

Preferir issuerUrl para que el complemento pueda descubrir los puntos de acceso de autorización, token y cierre de sesión desde los metadatos de reino:

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 tokens de refresco, solicitar offline_access solo si su reino Keycloak y cliente permiten tokens de actualización para esta aplicación:

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 OIDC está bloqueado o su despliegue no expone metadatos a la aplicación, configure los endpoints directamente. Mantenga la URL base exactamente como su despliegue de Keycloak la publica:

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 proveedor de Auth Connect predeterminados. Si ya utiliza SocialLoginAuthConnectpuedes inicializar el proveedor genérico y iniciar sesión con oauth2 más provider: 'oauth2' plus providerId: 'keycloak'.

Ver el Referencia del punto de conexión de OpenID Connect de Keycloak para la descubierta y los caminos de punto de conexión.

Si estás utilizando Keycloak para planificar la autenticación y los flujos de cuenta, conecte con Usando @capgo/capacitor-login-social para la capacidad nativa en Usando @capgo/capacitor-login-social @capgo/capacitor-login-social para el detalle de implementación en @capgo/capacitor-login-social @capgo/capacitor-clave-llave para el detalle de implementación en @capgo/capacitor-clave-llave @capgo/capacitor-biometría-nativa para el detalle de implementación en @capgo/capacitor-biometría-nativa, y Dos factores de autenticación para el detalle de implementación en Dos factores de autenticación.