Zum Inhalt springen

Keycloak

GitHub

Keycloak funktioniert über den eingebauten generischen OAuth2-Anbieter. Sie benötigen keinen neuen native Anbieter für Keycloak. Konfigurieren Sie Ihren Keycloak-Kunden als OpenID-Connect-Kunden und verwenden Sie provider: 'oauth2' mit einer stabilen providerId, wie zum Beispiel keycloak.

In Ihrem Keycloak-Raum erstellen Sie oder öffnen Sie den Kunden, der von Ihrer Capacitor-Anwendung verwendet wird:

  1. Verwenden Sie den Autorisierungscode-Fluss.
  2. Behalten Sie PKCE im App-Konfiguration aktiviert.
  3. Registrieren Sie jeden Redirect-URI, den Ihre Anwendung verwendet, zum Beispiel myapp://oauth/keycloak für mobile Geräte und einen HTTPS-Rückruf-URL für die Produktionswebanwendung.
  4. Verwenden Sie Bereiche wie openid profile email. Fügen Sie offline_access nur dann hinzu, wenn Ihr Realm und Client konfiguriert sind, um Refresh-Tokens auszugeben.

Die genaue Aussteller-URL ist deployment-spezifisch. Aktuelle Keycloak-Deployments veröffentlichen Realm-Metadaten häufig an https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, aber einige Bereitstellungen enthalten einen zusätzlichen Baseweg. Verwenden Sie die Aussteller-URL, die durch Ihr Realm’s OpenID-Endpunkt-Konfiguration angezeigt wird.

Präferieren Sie issuerUrl damit der Plugin die Autorisierungs-, Token- und Abmeldeendpunkte aus dem 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 anfragen offline_access nur, wenn Ihr Keycloak-Realm und Client für diese App Refresh-Tokens zulassen:

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-Entdeckung blockiert ist oder Ihre Bereitstellung keine Metadaten an die App ausgibt, konfigurieren Sie die Endpunkte direkt. Halten Sie die Basis-URL genau so, wie Ihre Keycloak-Bereitstellung 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 nicht eines der voreingestellten Auth-Connect-Anbieter-IDs. Wenn Sie bereits SocialLoginAuthConnect verwenden, können Sie den allgemeinen oauth2 Anbieter initialisieren und mit provider: 'oauth2' plus providerId: 'keycloak'.

Siehe die Keycloak OpenID Connect Endpunkt Referenz zur Entdeckung und Pfad der Endpunkte.

Wenn Sie Keycloak verwenden Keycloak um die Authentifizierung und die Kontoflussplanung zu planen, verbinden Sie es mit Mit @capgo/capacitor-social-login für die native Fähigkeit in Mit @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 in Zwei-Faktor-Authentifizierung.