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 una versione stabile providerIdad esempio keycloak.

Nella tua sfera Keycloak, crea o apri il client utilizzato dal tuo app Capacitor:

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

L'URL esatto del fornitore è specifico della distribuzione. Le distribuzioni Keycloak correnti pubblicano comunemente i metadati del dominio in https://keycloak.example.com/realms/my-realm/.well-known/openid-configurationma alcune distribuzioni includono un percorso base aggiuntivo. Utilizza l'URL del fornitore mostrato dalla configurazione dell'endpoint OpenID del tuo dominio.

Preferisci issuerUrl così 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 aggiornamento, richiedi offline_access solo se il tuo dominio Keycloak e il client consentono ai token di aggiornamento 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 espone i metadati all'app, configura gli endpoint direttamente. Mantieni l'URL di base esattamente come pubblicato dal tuo dominio 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 è uno dei provider ID preset di Auth Connect. Se già utilizzi SocialLoginAuthConnectpuoi ancora inizializzare il provider generico oauth2 provider e accedi con provider: 'oauth2' più providerId: 'keycloak'.

Vedi il riferimento al endpoint OpenID Connect di Keycloak per la scoperta e le vie degli endpoint.

Se stai utilizzando Keycloak per pianificare l'autenticazione e le flussi di account, connettilo con Utilizzando @capgo/capacitor-login-social per la capacità nativa in Utilizzando @capgo/capacitor-login-social Utilizzando @capgo/capacitor-login-social per il dettaglio di implementazione in Utilizzando @capgo/capacitor-login-social Utilizzando @capgo/capacitor-passkey per il dettaglio di implementazione in Utilizzando @capgo/capacitor-passkey Utilizzando @capgo/capacitor-biometric-nativo per il dettaglio di implementazione in Utilizzando @capgo/capacitor-biometric-nativo, e Autenticazione a due fattori per i dettagli di implementazione nella autenticazione a due fattori.