Langsung ke konten

Keycloak

GitHub

Keycloak bekerja melalui provider OAuth2 generik bawaan. Anda tidak perlu provider native baru untuk Keycloak. Konfigurasikan klien Keycloak Anda sebagai klien OpenID Connect dan gunakan provider: 'oauth2' dengan yang stabil providerId, seperti keycloak.

Di realm Keycloak Anda, buat atau buka klien yang digunakan oleh aplikasi Capacitor Anda:

  1. Gunakan alur otorisasi code.
  2. Biarkan PKCE tetap aktif di konfigurasi aplikasi.
  3. Daftarkan setiap URI redirect yang digunakan aplikasi Anda, misalnya myapp://oauth/keycloak untuk mobile dan URL callback HTTPS untuk web produksi.
  4. Gunakan scope seperti openid profile email. Tambahkan offline_access hanya jika realm dan client Anda dikonfigurasi untuk menerbitkan refresh token.

URL issuer yang tepat bergantung pada deployment. Deployment Keycloak saat ini biasanya memublikasikan metadata realm di https://keycloak.example.com/realms/my-realm/.well-known/openid-configuration, tetapi beberapa deployment menyertakan base path tambahan. Gunakan URL issuer yang ditunjukkan oleh OpenID Endpoint Configuration realm Anda.

Utamakan issuerUrl agar plugin dapat menemukan endpoint authorization, token, dan logout dari metadata realm:

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

Untuk refresh token, minta offline_access hanya jika realm dan client Keycloak Anda mengizinkan refresh token untuk aplikasi ini:

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

Jika penemuan OIDC diblokir atau deployment Anda tidak mengekspos metadata ke aplikasi, konfigurasikan endpoint secara langsung. Pertahankan base URL persis seperti yang dipublikasikan oleh deployment Keycloak Anda:

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 bukan salah satu ID provider preset Auth Connect. Jika Anda sudah menggunakan SocialLoginAuthConnect, Anda tetap dapat menginisialisasi oauth2 provider generik dan masuk dengan provider: 'oauth2' plus providerId: 'keycloak'.

Lihat Referensi endpoint OpenID Connect Keycloak untuk discovery dan path endpoint.

Langkah selanjutnya dengan Keycloak

Bagian berjudul “Lanjutkan dengan Keycloak”

Jika Anda menggunakan Keycloak untuk merencanakan alur autentikasi dan akun, hubungkan dengan Menggunakan @capgo/capacitor-social-login untuk kapabilitas native di Menggunakan @capgo/capacitor-social-login, @capgo/capacitor-social-login untuk detail implementasi di @capgo/capacitor-social-login, @capgo/capacitor-passkey untuk detail implementasi di @capgo/capacitor-passkey, @capgo/capacitor-native-biometric untuk detail implementasi di @capgo/capacitor-native-biometric, dan Autentikasi dua faktor untuk detail implementasi di autentikasi dua faktor.