Zum Inhalt springen

Keycloak

GitHub

Keycloak funktioniert über den integrierten generischen OAuth2-Provider. Sie benötigen keinen neuen nativen Provider für Keycloak. Konfigurieren Sie Ihren Keycloak-Client als OpenID Connect-Client und verwenden Sie provider: 'oauth2' mit einem stabilen providerId, z. B. keycloak.

Erstellen oder öffnen Sie in Ihrem Keycloak-Realm den Client, der von Ihrer Capacitor-App verwendet wird:

  1. Verwenden Sie den Authorization code-Flow.
  2. Halten Sie PKCE in der App-Konfiguration aktiviert.
  3. Registrieren Sie jede Redirect-URI, die Ihre App verwendet, z. B. myapp://oauth/keycloak für mobile Geräte und eine HTTPS-Callback-URL für das Web in der Produktion.
  4. Verwenden Sie Scopes wie openid profile email. Füge hinzu offline_access nur wenn dein Realm und Client so konfiguriert sind, dass sie Refresh Tokens ausstellen.

Die genaue Issuer-URL ist deployment-spezifisch. Aktuelle Keycloak-Deployments veröffentlichen Realm-Metadaten häufig unter https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, aber einige Deployments enthalten einen zusätzlichen Basispfad. Verwende die Issuer-URL, die in der OpenID Endpoint Configuration deines Realms angezeigt wird.

Bevorzugen issuerUrl damit das Plugin die Authorization-, Token- und Logout-Endpunkte aus den Realm-Metadaten entdecken kann:

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);

Für Refresh Tokens anfordern offline_access nur, wenn dein Keycloak-Realm und Client Refresh Tokens für diese App erlauben:

await SocialLogin.initialize({
oauth2: {
keycloak: {
appId: 'your-keycloak-client-id',
issuerUrl: keycloakIssuer,
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

Wenn die OIDC-Discovery blockiert ist oder dein Deployment der App keine Metadaten bereitstellt, konfiguriere die Endpoints direkt. Behalte die Basis-URL genau so bei, wie dein Keycloak-Deployment sie veröffentlicht:

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 ist keine der vordefinierten Auth-Connect-Provider-IDs. Wenn du bereits SocialLoginAuthConnect nutzt, kannst du trotzdem den generischen oauth2 Provider initialisieren und dich mit provider: 'oauth2' sowie providerId: 'keycloak'.

Siehe den Keycloak OpenID Connect Endpoint-Referenz für Discovery- und Endpoint-Pfade.

Wenn du es nutzt Keycloak Um Authentifizierungs- und Account-Flows zu planen, verbinde es mit @capgo/capacitor-social-login verwenden für die native Funktion bei der Verwendung von @capgo/capacitor-social-login, @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-social-login, @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails zur Zwei-Faktor-Authentifizierung.