Vai al contenuto

Keycloak

GitHub

Keycloak funziona tramite il provider generico OAuth2 integrato. Non serve un nuovo provider nativo per Keycloak. Configura il tuo client Keycloak come client OpenID Connect e usa provider: 'oauth2' con una versione stabile di providerId, come keycloak.

Nel tuo realm Keycloak, crea o apri il client utilizzato dalla tua app Capacitor:

  1. Usa il flow di autorizzazione code.
  2. Mantieni PKCE abilitato nella configurazione dell'app.
  3. Registra ogni redirect URI utilizzato dalla tua app, ad esempio myapp://oauth/keycloak per mobile e un URL di callback HTTPS per il web in produzione.
  4. Usa scope come openid profile email. Aggiungi offline_access solo se il realm e il client sono configurati per emettere refresh token.

L'URL dell'issuer esatto dipende dal deployment. Le attuali installazioni di Keycloak pubblicano solitamente i metadati del realm su https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, ma alcuni deployment includono un percorso base extra. Usa l'issuer URL indicato dall'OpenID Endpoint Configuration del tuo realm.

Preferisci issuerUrl così il plugin può individuare gli endpoint di authorization, token e logout dai metadati 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);

Per i refresh token, richiedi offline_access solo se il realm e il client Keycloak consentono i refresh token per questa 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,
},
},
});

Se l'OIDC discovery è bloccato o il tuo deployment non espone i metadati all'app, configura gli endpoint direttamente. Mantieni l'URL base esattamente come lo pubblica il tuo deployment 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 non è tra i preset provider ID di Auth Connect. Se utilizzi già SocialLoginAuthConnect, puoi comunque inizializzare il oauth2 provider generico e fare il login con provider: 'oauth2' più providerId: 'keycloak'.

Guarda il Riferimento endpoint Keycloak OpenID Connect per il discovery e i path degli endpoint.

Se stai usando Keycloak per pianificare i flussi di autenticazione e account, collegandolo a Utilizzo di @capgo/capacitor-social-login per la funzionalità nativa in Utilizzo di @capgo/capacitor-social-login, @capgo/capacitor-social-login per i dettagli di implementazione in @capgo/capacitor-social-login, @capgo/capacitor-passkey per i dettagli di implementazione in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric per i dettagli di implementazione in @capgo/capacitor-native-biometric, e Autenticazione a due fattori per i dettagli sull'implementazione dell'autenticazione a due fattori.