コンテンツにジャンプ

Generic OAuth2 プロバイダー

GitHub

The Capgo Social Login plugin includes a built-in OAuth2 and OpenID Connect engine. You can use it to connect any standards-based identity provider, including:

  • GitHub
  • Azure AD / Microsoft Entra ID
  • Auth0
  • Okta
  • Keycloak
  • カスタム OAuth2 または OIDC サーバー

The oauth2 設定は多プロバイダー設計です。複数のプロバイダーを一度に登録し、ログイン時には 1 つを選択できます。 providerId.

プロバイダーを設定する前に、以下の情報を収集してください。

  • OAuth クライアント ID
  • アプリのスキームまたは Web コールバック URL に対応するリダイレクト URL
  • 認証エンドポイント
  • 認証フロー code のためにトークンエンドポイント、または OIDC の検出 issuerUrl flow
  • 必要なスコープ openid profile email

Multi-provider configuration

Multi-provider configuration

Use SocialLogin.initialize() アプリ起動時に一度だけ実行し、必要なすべてのプロバイダーを登録します:

import { SocialLogin } from '@capgo/capacitor-social-login';
await SocialLogin.initialize({
oauth2: {
github: {
appId: 'your-github-client-id',
authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
redirectUrl: 'myapp://oauth/github',
scope: 'read:user user:email',
pkceEnabled: true,
resourceUrl: 'https://api.github.com/user',
},
azure: {
appId: 'your-azure-client-id',
authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
redirectUrl: 'myapp://oauth/azure',
scope: 'openid profile email User.Read',
pkceEnabled: true,
resourceUrl: 'https://graph.microsoft.com/v1.0/me',
},
auth0: {
issuerUrl: 'https://your-tenant.auth0.com',
appId: 'your-auth0-client-id',
redirectUrl: 'myapp://oauth/auth0',
scope: 'openid profile email offline_access',
pkceEnabled: true,
additionalParameters: {
audience: 'https://your-api.example.com',
},
},
},
});

プロバイダーがOpenID Connectのディスカバリードキュメントを公開している場合、最も簡単な設定です: issuerUrl Copy to clipboard

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

__CAPGO_KEEP_0__

  • clientId aliasとして appId
  • authorizationEndpoint aliasとして authorizationBaseUrl
  • tokenEndpoint aliasとして accessTokenEndpoint
  • endSessionEndpoint aliasとして logoutUrl
  • scopes aliasとして scope

も利用可能:

  • additionalParameters 認証要求のオーバーライド用
  • additionalTokenParameters トークンの交換のオーバーライド用
  • additionalResourceHeaders カスタムリソースエンドポイントヘッダ用
  • additionalLogoutParameters そして postLogoutRedirectUrl ログアウトフローのために
  • loginHint, prompt、そして iosPrefersEphemeralSession

Auth Connect互換のプリセット

Auth Connect互換のプリセット

Ionic Auth Connectから移行している場合、同じプロバイダ名を維持したい場合は SocialLoginAuthConnect.

import { SocialLoginAuthConnect } from '@capgo/capacitor-social-login';
await SocialLoginAuthConnect.initialize({
authConnect: {
auth0: {
domain: 'https://your-tenant.auth0.com',
clientId: 'your-auth0-client-id',
redirectUrl: 'myapp://oauth/auth0',
audience: 'https://your-api.example.com',
},
azure: {
tenantId: 'common',
clientId: 'your-azure-client-id',
redirectUrl: 'myapp://oauth/azure',
},
okta: {
issuer: 'https://dev-12345.okta.com/oauth2/default',
clientId: 'your-okta-client-id',
redirectUrl: 'myapp://oauth/okta',
},
},
});

サポートされているプリセットプロバイダID:

  • auth0
  • azure
  • cognito
  • okta
  • onelogin

プロバイダがカスタムエンドポイントを必要とする場合は、プリセットをオーバーライドするか、プリセットを回避してプロバイダを直接 oauth2.

設定オプション

セクション
オプションタイプ必要説明
appId / clientIdOAuth2クライアント識別子はいOAuth2クライアント識別子
issuerUrl文字列いいえOIDC検出ベースURL
authorizationBaseUrl / authorizationEndpoint文字列はい*認可エンドポイントURL
accessTokenEndpoint / tokenEndpoint文字列いいえ*トークンエンドポイントURL
redirectUrlstringはいコールバック URL
scope / scopesstring / string[]いいえ要求されたスコープ
pkceEnabledbooleanいいえ標準値 true
responseType'code' または 'token'いいえ標準値 'code'
resourceUrlOAuth2プラグインなしユーザー情報またはリソースエンドポイント
logoutUrl / endSessionEndpoint文字列なしログアウトまたはセッション終了URL
postLogoutRedirectUrl文字列なしログアウト後リダイレクトURL
additionalParametersRecord<string, string>なし追加の認証要求パラメータ
additionalTokenParametersRecord<string, string>なし追加トークン要求パラメータ
additionalResourceHeadersRecord<string, string>なし追加ヘッダー resourceUrl
additionalLogoutParametersRecord<string, string>なしログアウトパラメータ
loginHint文字列なしショートカット additionalParameters.login_hint
prompt文字列なしショートカット additionalParameters.prompt
iosPrefersEphemeralSessionブール値NoiOSブラウザセッションを一時的に使用する
logsEnabledbooleanNo詳細なデバッグログを有効にする

authorizationBaseUrl と accessTokenEndpoint は、 issuerUrl は、

OAuth2によるログインを使用する

OAuth2によるログインを使用する

ログイン

ログイン
const result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'github',
scope: 'read:user user:email',
loginHint: 'user@example.com',
},
});

ウェブ上でのリダイレクトフロー

ウェブ上でのリダイレクトフロー

使用 flow: 'redirect' フルページリダイレクトを実現したい場合は、以下の方法で実行してください。

await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'auth0',
flow: 'redirect',
},
});

ログイン結果を解析するページで、以下の処理を行ってください。

const result = await SocialLogin.handleRedirectCallback();
if (result?.provider === 'oauth2') {
console.log(result.result.providerId);
}

ログイン状態とログアウト

クリップボードにコピー
const status = await SocialLogin.isLoggedIn({
provider: 'oauth2',
providerId: 'github',
});
await SocialLogin.logout({
provider: 'oauth2',
providerId: 'github',
});

ウェブ上でのリダイレクトフロー

リフレッシュトークンセクション
await SocialLogin.refresh({
provider: 'oauth2',
options: {
providerId: 'github',
},
});
const refreshed = await SocialLogin.refreshToken({
provider: 'oauth2',
providerId: 'github',
refreshToken: 'existing-refresh-token',
});

refresh() __CAPGO_KEEP_0__はプラグインによって保存されたリフレッシュトークンを使用します。 refreshToken() __CAPGO_KEEP_0__は自分でリフレッシュトークンを渡すことができ、最新のOAuth2レスポンスを返します。

現在のアクセストークンを取得

現在のアクセストークンを取得セクション
const code = await SocialLogin.getAuthorizationCode({
provider: 'oauth2',
providerId: 'github',
});
console.log(code.accessToken);

プロバイダ固有の例

__CAPGO_KEEP_0__例

Use GitHub when you want a simple OAuth app flow and basic profile data:

await SocialLogin.initialize({
oauth2: {
github: {
appId: 'your-github-client-id',
authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
redirectUrl: 'myapp://oauth/github',
scope: 'read:user user:email',
pkceEnabled: true,
resourceUrl: 'https://api.github.com/user',
},
},
});
const githubResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'github',
},
});
console.log(githubResult.result.accessToken?.token);
console.log(githubResult.result.resourceData);

Azure AD / Microsoft Entra ID の例

「Azure AD / Microsoft Entra ID の例」

Microsoft Graph のユーザープロファイルなどのデータを必要とする場合に Azure を使用してください。

await SocialLogin.initialize({
oauth2: {
azure: {
appId: 'your-azure-client-id',
authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
redirectUrl: 'myapp://oauth/azure',
scope: 'openid profile email User.Read',
pkceEnabled: true,
resourceUrl: 'https://graph.microsoft.com/v1.0/me',
},
},
});
const azureResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'azure',
},
});
console.log(azureResult.result.idToken);
console.log(azureResult.result.resourceData);

Auth0 の例

「Auth0 の例」

OIDC に加えてカスタム API の聴衆が必要な場合に Auth0 を使用してください。

await SocialLogin.initialize({
oauth2: {
auth0: {
appId: 'your-auth0-client-id',
authorizationBaseUrl: 'https://your-tenant.auth0.com/authorize',
accessTokenEndpoint: 'https://your-tenant.auth0.com/oauth/token',
redirectUrl: 'myapp://oauth/auth0',
scope: 'openid profile email offline_access',
pkceEnabled: true,
additionalParameters: {
audience: 'https://your-api.example.com',
},
},
},
});
const auth0Result = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'auth0',
flow: 'redirect',
},
});

Web でのリダイレクトフローを使用する場合、コールバックページで結果を読み戻してください。

const auth0Result = await SocialLogin.handleRedirectCallback();
if (auth0Result?.provider === 'oauth2') {
console.log(auth0Result.result.idToken);
}

Okta の例

Oktaの例
await SocialLogin.initialize({
oauth2: {
okta: {
appId: 'your-okta-client-id',
authorizationBaseUrl: 'https://your-domain.okta.com/oauth2/default/v1/authorize',
accessTokenEndpoint: 'https://your-domain.okta.com/oauth2/default/v1/token',
redirectUrl: 'myapp://oauth/okta',
scope: 'openid profile email offline_access',
pkceEnabled: true,
resourceUrl: 'https://your-domain.okta.com/oauth2/default/v1/userinfo',
},
},
});
const oktaResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'okta',
},
});
console.log(oktaResult.result.resourceData);

Keycloakの例

__CAPGO_KEEP_0__

プロバイダーが公開している場合、検出を使用してください /.well-known/openid-configuration:

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});
const keycloakResult = await SocialLogin.login({
provider: 'oauth2',
options: {
providerId: 'keycloak',
},
});
console.log(keycloakResult.result.idToken);

OAuth2のレスポンス形状

__CAPGO_KEEP_0__

OAuth2のログインが成功すると、以下のフィールドが返されます

フィールド説明
providerIdログインに使用される設定済みプロバイダーキー
accessTokenアクセストークンパイロードまたは null
idTokenOIDC ID トークンがプロバイダーが返した場合
refreshTokenリフレッシュトークンが要求されたスコープが許可した場合
resourceDataプロバイダーから取得したRaw JSON resourceUrl
scope許可されたスコープ
tokenType通常 bearer
expiresInトークン有効期限(秒)
  1. OAuthアプリを作成する 開く GitHub 開発者設定 そしてOAuthアプリを作成します。

  2. コールバックURLを設定します。 アプリのリダイレクトURLを使用してください。例えば myapp://oauth/github.

  3. プラグインを設定します。

    await SocialLogin.initialize({
    oauth2: {
    github: {
    appId: 'your-github-client-id',
    authorizationBaseUrl: 'https://github.com/login/oauth/authorize',
    accessTokenEndpoint: 'https://github.com/login/oauth/access_token',
    redirectUrl: 'myapp://oauth/github',
    scope: 'read:user user:email',
    pkceEnabled: true,
    resourceUrl: 'https://api.github.com/user',
    },
    },
    });
  1. アプリを登録する Azure ポータルに移動し、 App registrationsネイティブまたはモバイルアプリの登録を作成します。

  2. リダイレクト URIを追加 モバイルまたはデスクトップ用のリダイレクト URIを追加して、実行中のアプリのコールバック URLに一致させます。

  3. プラグインを設定

    await SocialLogin.initialize({
    oauth2: {
    azure: {
    appId: 'your-azure-client-id',
    authorizationBaseUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
    accessTokenEndpoint: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    redirectUrl: 'myapp://oauth/azure',
    scope: 'openid profile email User.Read',
    pkceEnabled: true,
    resourceUrl: 'https://graph.microsoft.com/v1.0/me',
    },
    },
    });
  1. 実行中のアプリを開く Auth0 Auth0 ダッシュボード Native アプリを作成します。

  2. 許可されたコールバック URL を設定します。 Capacitor アプリで使用する正確なリダイレクト URL を追加します。

  3. プラグインを設定します。

    await SocialLogin.initialize({
    oauth2: {
    auth0: {
    appId: 'your-auth0-client-id',
    authorizationBaseUrl: 'https://your-tenant.auth0.com/authorize',
    accessTokenEndpoint: 'https://your-tenant.auth0.com/oauth/token',
    redirectUrl: 'myapp://oauth/auth0',
    scope: 'openid profile email offline_access',
    pkceEnabled: true,
    additionalParameters: {
    audience: 'https://your-api.example.com',
    },
    logoutUrl: 'https://your-tenant.auth0.com/v2/logout',
    },
    },
    });
  1. OIDC ネイティブ アプリを作成します。 Okta 管理コンソールで、OIDC ネイティブ アプリケーションを作成します。

  2. リダイレクト URI を追加します。 __CAPGO_KEEP_0__ アプリで使用する正確なコールバック URL を登録します。

  3. プラグインの設定

    await SocialLogin.initialize({
    oauth2: {
    okta: {
    appId: 'your-okta-client-id',
    authorizationBaseUrl: 'https://your-domain.okta.com/oauth2/default/v1/authorize',
    accessTokenEndpoint: 'https://your-domain.okta.com/oauth2/default/v1/token',
    redirectUrl: 'myapp://oauth/okta',
    scope: 'openid profile email offline_access',
    pkceEnabled: true,
    resourceUrl: 'https://your-domain.okta.com/oauth2/default/v1/userinfo',
    },
    },
    });

KeycloakとカスタムOIDCプロバイダー

KeycloakとカスタムOIDCプロバイダー

プロバイダーがOpenID Connectの自動検出をサポートしている場合、OpenID Connectの自動検出を優先します。 issuerUrl:

await SocialLogin.initialize({
oauth2: {
keycloak: {
issuerUrl: 'https://sso.example.com/realms/mobile',
clientId: 'mobile-app',
redirectUrl: 'myapp://oauth/keycloak',
scope: 'openid profile email offline_access',
pkceEnabled: true,
},
},
});

自動検出が利用できない場合は、認証とトークンエンドポイントを手動で設定してください。

プラットフォーム固有の注意

プラットフォーム固有の注意
  • __CAPGO_KEEP_0__ ASWebAuthenticationSession.
  • 設定 iosPrefersEphemeralSession: true プライベートブラウザセッションを使用する場合は、共有クッキーなしで実行したい場合に、if文を設定します。
  • OAuthリダイレクトは、Schemeとホストを使用してアプリ内に戻ります。
  • Androidのデープリンク設定と同じURLを使用して、プロバイダーのコールバックURLを確実に設定してください。
  • プラグインはOAuthアクティビティをすでに処理しています。アプリが異なるリダイレクトパターンを必要とする場合にのみ、カスタムインテントフィルタを追加してください。
  • ポップアップフローはデフォルトの設定であり、シングルページアプリケーションでは効果的です。
  • プロバイダーがポップアップをブロックしている場合、または認証ルールがトップレベルナビゲーションを必要とする場合、リダイレクトフローが適しています。
  • 一部のプロバイダーは、CORSを使用して直接ブラウザでトークンを交換することをブロックしています。その場合、バックエンドでトークンを交換するか、パブリッククライアントを許可するプロバイダーの設定を使用してください。

セキュリティのベストプラクティス

セキュリティのベストプラクティス
  1. PKCEを使用する 保持する pkceEnabled: true パブリッククライアント用

  2. Prefer authorization code flow responseType: 'code' 暗黙のフローは安全ではない

  3. トークンをサーバー側で検証する 発行者、受信者、有効期限、署名を検証する

  4. リフレッシュトークンを安全に保存する ネイティブアプリ用、プラグインを組み合わせる @capgo/capacitor-persistent-account.

  5. HTTPSを使用してください プロダクション用認証エンドポイントとログアウトエンドポイントは常にHTTPSを使用する必要があります。

トラブルシューティング

トラブルシューティング

すべてのOAuth2メソッドには、構成済みのプロバイダーキーが必要です。

await SocialLogin.login({
provider: 'oauth2',
options: { providerId: 'github' },
});

呼び出し SocialLogin.initialize() ログインする前に、 providerId 指定されたオブジェクトのキーと一致することを確認してください。 oauth2.

リダイレクトURLの不一致

リダイレクトURLの不一致
  • アプリとプロバイダーのダッシュボードで設定されているリダイレクトURLを、文字列単位で比較してください。
  • 末尾のスラッシュ、スキームの不一致、ホストの差異を確認してください。
  • モバイルアプリのURLスキームを登録する前に、デバイス上でテストする前に確認してください。

リフレッシュトークンが返されませんでした

リフレッシュトークンが返されませんでした

ほとんどのプロバイダは、スコープの要求や明示的な同意の強制などでリフレッシュトークンを返します。プロバイダーのポリシーを確認してください。 offline_access トークン交換のデバッグ

を有効にします。 logsEnabled: true を有効にします。

「関連ドキュメント」

一般的なOAuth2プロバイダーから続けてください

「一般的なOAuth2プロバイダーから続けてください」

あなたが使用している場合 一般的なOAuth2プロバイダー @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-ソーシャルログインを使用して ソーシャルログインのネイティブ機能を使用するために@capgo/capacitor-ソーシャルログインを使用します @capgo/capacitor-ソーシャルログイン @capgo/capacitor-social-login for the implementation detail in @capgo/capacitor-social-login, @capgo/capacitor-パスキー for the implementation detail in @capgo/capacitor-passkey, @capgo/capacitor-ネイティブバイオメトリック for the implementation detail in @capgo/capacitor-native-biometric, and 2要素認証 Capacitor-2要素認証の実装詳細については、