メインコンテンツへスキップ

Keycloak

GitHub

Keycloak は組み込みの汎用 OAuth2 プロバイダーを通じて動作します。Keycloak 用の新しいネイティブプロバイダーは不要です。Keycloak クライアントを OpenID Connect クライアントとして設定し、 provider: 'oauth2' を安定した providerId、例えば keycloak.

Keycloak のレルムで、Capacitor アプリで使用されるクライアントを作成または開きます:

  1. 認可 code フローを使用します。
  2. アプリ設定で PKCE を有効にしてください。
  3. アプリで使用されるすべてのリダイレクト URI を登録します。例えば myapp://oauth/keycloak モバイル用と、本番環境の Web 用 HTTPS コールバック URL。
  4. スコープとして以下を使用します: openid profile email. 追加 offline_access realmとclientがrefresh tokenを発行するように設定されている場合に限ります。

正確なissuer URLはデプロイ環境によって異なります。現在のKeycloakデプロイでは、一般的にrealmのメタデータを次に公開しています: https://keycloak.example.com/realms/my-realm/.well-known/openid-configurationただし、デプロイによっては追加のベースパスが含まれる場合があります。realmのOpenID Endpoint Configurationに表示されるissuer URLを使用してください。

推奨: issuerUrl これにより、プラグインはrealmのメタデータからauthorization、token、logoutエンドポイントを検出できます:

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

refresh tokenを使う場合は、次をリクエストしてください: offline_access Keycloakのrealmとclientがこのアプリに対してrefresh tokenを許可している場合のみです:

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

エンドポイントの手動フォールバック

「手動エンドポイントフォールバック」セクション

OIDCディスカバリがブロックされている場合や、デプロイがアプリにメタデータを公開していない場合は、エンドポイントを直接設定してください。ベースURLは、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はAuth ConnectのプリセットプロバイダーIDには含まれていません。すでに SocialLoginAuthConnectを使用している場合でも、汎用の oauth2 プロバイダーを初期化して、次でログインできます: provider: 'oauth2' と providerId: 'keycloak'.

詳細については、 Keycloak OpenID Connect エンドポイントリファレンス ディスカバリおよびエンドポイントパスの確認用。

使用している場合 Keycloak 認証とアカウントフローを計画するには、これを次と連携させてください @capgo/capacitor-social-login の使用 「@capgo/capacitor-social-login の使用」のネイティブ機能のために、 @capgo/capacitor-social-login @capgo/capacitor-social-login の実装の詳細については、 @capgo/capacitor-passkey @capgo/capacitor-passkey の実装詳細については、 @capgo/capacitor-native-biometric @capgo/capacitor-native-biometric の実装の詳細、および 2要素認証 二要素認証の実装の詳細については。