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 providerIdz. B. keycloak.

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

  1. Verwenden Sie den Autorisierungscode-Fluss.
  2. Behalten Sie PKCE in der App-Konfiguration aktiviert.
  3. Registrieren Sie alle Redirect-URIs, die Ihre App verwendet, zum Beispiel myapp://oauth/keycloak für mobile Geräte und eine HTTPS-Rückruf-URL für die Produktionswebanwendung.
  4. Wenden Sie sich auf Scopes wie openid profile emailzurück, nur wenn Ihr Realm und Client konfiguriert sind, um Refresh-Tokens auszugeben. offline_access Die genaue Aussteller-URL ist deployment-spezifisch. Aktuelle Keycloak-Deployments veröffentlichen üblicherweise Realm-Metadaten unter

aber einige Bereitstellungen enthalten einen zusätzlichen Basis-Path. Verwenden Sie die Aussteller-URL, die durch Ihre Realm’s OpenID-Endpunkt-Konfiguration angezeigt wird. https://keycloak.example.com/realms/my-realm/.well-known/openid-configurationBeispiel für OIDC-Entdeckung

Sektion mit dem Titel „Beispiel für OIDC-Entdeckung“

Präferieren Sie

damit der Plugin die Autorisierungs-, Token- und Abmelde-Endpunkte aus den Realm-Metadaten entdecken kann: issuerUrl __CAPGO_KEEP_0__

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-Domäne und Client Refresh-Tokens für diese App 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 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 einer der voreingestellten Auth-Connect-Anbieter-IDs. Wenn Sie bereits SocialLoginAuthConnectinitialisieren, können Sie den generischen oauth2 Anbieter und Anmeldung mit provider: 'oauth2' plus providerId: 'keycloak'.

Siehe die Referenz zum Keycloak-OpenID-Connect-Endpunkt für Entdeckung und Pfad der Endpunkte.

Wenn Sie die Authentifizierung und die Kontenflüsse planen Keycloak mit ihm verbinden Mit @capgo/capacitor-social-login für die native Fähigkeit in Mit @capgo/capacitor-social-login Mit @capgo/capacitor-social-login für die Implementierungsdetail in Mit @capgo/capacitor-social-login Mit @capgo/capacitor-passkey für die Implementierungsdetail in Mit @capgo/capacitor-passkey Mit @capgo/capacitor-native-biometric für die Implementierungsdetail in Mit @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails in der Zwei-Faktor-Authentifizierung.