Aller au contenu

Keycloak

GitHub

Keycloak fonctionne via le fournisseur OAuth2 générique intégré. Vous n'avez pas besoin d'un nouveau fournisseur natif pour Keycloak. Configurez votre client Keycloak comme un client OpenID Connect et utilisez provider: 'oauth2' with a stable providerIdstable, tel que keycloak.

Dans votre realm Keycloak, créez ou ouvrez le client utilisé par votre application Capacitor :

  1. Utilisez le flux d'autorisation code.
  2. Laissez PKCE activé dans la config de l'app.
  3. Enregistrez chaque URI de redirection utilisée par votre app, par exemple myapp://oauth/keycloak pour le mobile et une URL de callback HTTPS pour le web en production.
  4. Utilisez des scopes tels que openid profile email. Ajoutez offline_access uniquement lorsque votre realm et votre client sont configurés pour émettre des refresh tokens.

L'URL exacte de l'issuer dépend du déploiement. Les déploiements Keycloak actuels publient couramment les métadonnées du realm sur https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, mais certains déploiements ajoutent un chemin de base supplémentaire. Utilisez l'URL de l'issuer indiquée par l'OpenID Endpoint Configuration de votre realm.

Privilégiez issuerUrl afin que le plugin puisse découvrir les endpoints d'autorisation, de token et de déconnexion via les métadonnées du 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);

Pour les refresh tokens, demandez offline_access uniquement si votre realm et votre client Keycloak autorisent les refresh tokens pour cette application :

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 la découverte OIDC est bloquée ou si votre déploiement n’expose pas les métadonnées à l’application, configurez les points d’accès directement. Conservez l’URL de base exactement telle que votre déploiement Keycloak la publie :

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 n’est pas l’un des identifiants de fournisseur prédéfinis d’Auth Connect. Si vous utilisez déjà SocialLoginAuthConnect, vous pouvez toujours initialiser le oauth2 et vous connecter avec provider: 'oauth2' , ce qui providerId: 'keycloak'.

Consultez le Référence du point de terminaison OpenID Connect de Keycloak pour la découverte et les chemins des endpoints.

Si vous utilisez Keycloak pour planifier les flux d'authentification et de compte, le connecter à Utiliser @capgo/capacitor-social-login pour la capacité native dans Utiliser @capgo/capacitor-social-login @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-social-login @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey @capgo/capacitor-native-biometric pour les détails d'implémentation dans @capgo/capacitor-native-biometric, et Authentification à deux facteurs pour les détails d'implémentation de l'authentification à deux facteurs.