Skip to content

Keycloak

GitHub

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

承認Capacitorフローを使用します。

  1. Use the authorization code flow.
  2. アプリ設定で PKCE を有効にします。
  3. 使用するすべてのリダイレクト URI を登録します。例えば myapp://oauth/keycloak モバイル用と HTTPS のコールバック URL をプロダクション用の Web アプリ用に。
  4. スコープとして openid profile emailを使用します。ただし、リールムとクライアントがリフレッシュトークンを発行するように設定されている場合にのみ offline_access リフレッシュトークンを追加します。

Issuer URL はデプロイメント依存です。現在の Keycloak のデプロイメントでは、 https://keycloak.example.com/realms/my-realm/.well-known/openid-configurationにリールムのメタデータを公開していますが、一部のデプロイメントでは追加のベース パスが含まれます。リールムの OpenID エンドポイントの構成から表示される issuer URL を使用します。

OIDC discovery の例

OIDC discovery の例

推奨 issuerUrl の場合、プラグインはリールムのメタデータから認証、トークン、ログアウト エンドポイントを自動的に検出できます。

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

リフレッシュトークンについては、以下の条件を満たす場合にのみリクエストしてください。 offline_access Keycloakのドメインとクライアントがこのアプリケーションに対してリフレッシュトークンのリクエストを許可している場合:

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' plus providerId: 'keycloak'.

参照してください Keycloak OpenID Connect エンドポイントの参照 発見とエンドポイントのパスについて

Keycloakを使用している場合 Keycloak Keycloakを連携する Using @capgo/capacitor-social-login for the native capability in Using @capgo/capacitor-social-login, @capgo/capacitor-social-login for the implementation detail in @capgo/capacitor-social-login, @capgo/capacitor-passkey for the implementation detail in @capgo/capacitor-passkey, @capgo/capacitor-native-biometric for the implementation detail in @capgo/capacitor-native-biometric, and Two-factor authentication 2要素認証の実装詳細について。