Saltare al contenuto

Keycloak

GitHub

Keycloak funziona attraverso il provider OAuth2 generico integrato. Non è necessario un nuovo provider nativo per Keycloak. Configura il tuo client Keycloak come un client OpenID Connect e utilizza provider: 'oauth2' con un flusso stabile providerIdad esempio keycloak.

Nel tuo dominio Keycloak, crea o apri il client utilizzato dal tuo app Capacitor:

  1. Utilizza il flusso di autorizzazione code.
  2. Mantieni abilitato PKCE nella configurazione dell'app.
  3. Registra ogni URI di reindirizzamento che il tuo app utilizza, ad esempio myapp://oauth/keycloak For mobile e un URL di callback HTTPS per la produzione web.
  4. Usa ambiti come openid profile email. Aggiungi offline_access solo quando il tuo dominio e il client sono configurati per emettere token di refresh.

L'URL dell'emittente è specifico per la distribuzione. Le distribuzioni Keycloak correnti pubblicano comunemente i metadati del dominio a https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, ma alcune distribuzioni includono un percorso base aggiuntivo. Utilizza l'URL dell'emittente mostrato dalla configurazione del punto di accesso OpenID del tuo dominio.

Preferisci issuerUrl in modo che il plugin possa scoprire gli endpoint di autorizzazione, token e logout dai metadati del dominio:

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 token di refresh, richiedi offline_access solo se il tuo dominio Keycloak e il client consentono ai token di refresh 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 la scoperta OIDC è bloccata o la tua distribuzione non esporre i metadati all'app, configura gli endpoint direttamente. Mantieni l'URL base esattamente come la tua distribuzione Keycloak lo pubblica:

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 è uno dei provider ID preset di Auth Connect. Se già utilizzi SocialLoginAuthConnect, puoi ancora inizializzare il provider generico e accedere con oauth2 plus provider: 'oauth2' __CAPGO_KEEP_0__ providerId: 'keycloak'.

Vedi il Riferimento al punto di accesso Keycloak OpenID Connect per la scoperta e le vie dei punti di accesso. Documenti correlati

Fornitori OAuth2 e OIDC

Sottosezione intitolata “Continua da Keycloak”

Se stai utilizzando

Keycloak Keycloak OpenID Connect endpoint reference for discovery and endpoint paths. To pianificare l'autenticazione e le flussi di account, connettilo con Utilizza @capgo/capacitor-login-social Per la capacità nativa in Utilizza @capgo/capacitor-login-social @capgo/capacitor-login-social Per il dettaglio di implementazione in @capgo/capacitor-login-social @capgo/capacitor-passkey Per il dettaglio di implementazione in @capgo/capacitor-passkey @capgo/capacitor-biometric-nativo Per il dettaglio di implementazione in @capgo/capacitor-biometric-nativo, e Autenticazione a due fattori Per il dettaglio di implementazione in Autenticazione a due fattori.