コンテンツにスキップ

OAuth2プロバイダー

GitHub

CapgoのSocial Loginプラグインには、OAuth2およびOpenID Connectエンジンが組み込まれています。任意の標準ベースのIDプロバイダーを接続できます。以下のものを含みます。

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

設定は複数のプロバイダーをサポートするように設計されています。同時に複数のプロバイダーを登録し、ログイン時には1つを選択できます。 oauth2 What you need providerId.

OAuthクライアントID

  • アプリのスキームまたはWebコールバックURLに一致するリダイレクトURL
  • 認証エンドポイント
  • 認証フロー__CAPGO_KEEP_0__のために認証トークンエンドポイント、またはOIDCディスカバリ
  • A token endpoint for authorization code flow, or an issuerUrl 複数のプロバイダーをサポートする設定
  • What you need openid profile email

アプリ起動時に一度だけ使用し、必要なすべてのプロバイダーを登録する: 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 プラグインは、OAuthおよびOIDCの一般的なエイリアスもサポートしています:

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

のエイリアスとして

  • clientId エイリアスとして使用できます: appId
  • authorizationEndpoint のエイリアスとして authorizationBaseUrl
  • tokenEndpoint as an alias of accessTokenEndpoint
  • endSessionEndpoint as an alias of logoutUrl
  • scopes as an alias of scope

Also available:

  • additionalParameters for auth request overrides
  • additionalTokenParameters for token exchange overrides
  • additionalResourceHeaders for custom resource endpoint headers
  • additionalLogoutParameters and postLogoutRedirectUrl for logout flows
  • loginHint, prompt, and iosPrefersEphemeralSession

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 / clientId文字列はいOAuth2 client identifier
issuerUrl__CAPGO_KEEP_0____CAPGO_KEEP_1__OIDC discovery base URL
authorizationBaseUrl / authorizationEndpoint__CAPGO_KEEP_0__Yes__CAPGO_KEEP_1__
accessTokenEndpoint / tokenEndpointAuthorization endpoint URL__CAPGO_KEEP_0__Yes*
redirectUrl__CAPGO_KEEP_1__Token endpoint URLコールバック URL
scope / scopes__CAPGO_KEEP_0__ / __CAPGO_KEEP_0__[]しない要求されたスコープ
pkceEnabledbooleanしないデフォルト値は true
responseType'code' または 'token'しないデフォルト値は 'code'
resourceUrlstringしないユーザー情報またはリソースエンドポイント
logoutUrl / endSessionEndpoint__CAPGO_KEEP_0__Noログアウトまたはセッション終了URL
postLogoutRedirectUrl__CAPGO_KEEP_0__Noログアウト後リダイレクトURL
additionalParametersRecord<string, string>No追加の認証要求パラメータ
additionalTokenParametersRecord<string, string>No追加のトークン要求パラメータ
additionalResourceHeadersRecord<string, string>No追加ヘッダー resourceUrl
additionalLogoutParametersRecord<string, string>しない追加ログアウトパラメータ
loginHint文字列しないショートカット additionalParameters.login_hint
prompt文字列しないショートカット additionalParameters.prompt
iosPrefersEphemeralSessionブール値しないiOS上でエフェメラルブラウザセッションを優先する
logsEnabledbooleanNo詳細なデバッグ ロギングを有効にする

authorizationBaseUrlaccessTokenEndpoint は、明示的なエンドポイントが優先されるため、発見された値はオプションです。 issuerUrl OAuth2 ログインを使用する

OAuth2 ログインを使用するセクション

ログイン

ログインセクション

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

Use flow: 'redirect' if you want a full-page redirect instead of a popup:

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

On the page that receives the callback, parse the login result:

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

プロバイダ固有の例

プロバイダ固有の例

GitHubの例

GitHubの例

GitHubを使用すると、シンプルなOAuthアプリフローと基本的なプロファイルデータを取得できます。

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 を使用する必要がある場合、ユーザープロファイルなどの Microsoft Graph データが必要です。

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 は、OIDC に加えてカスタム API の聴衆が必要な場合に適しています。

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

プロバイダーが公開している場合、発見を使用してください。 /.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 レスポンスの形状

OAuth2 レスポンスの形状セクション

OAuth2 ログインが成功すると、次の値が返されます。

フィールド説明
providerIdログインに使用される設定済みプロバイダー キー
accessTokenアクセストークン ペイロードまたは null
idTokenOIDC ID トークンがプロバイダーが返した場合
refreshTokenリフレッシュトークンを取得することが許可されたスコープの場合
resourceData__CAPGO_KEEP_0__ resourceUrl
scope取得したJSON
tokenType許可されたスコープ bearer
expiresIn通常

GitHub

GitHub
  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を追加してください。

  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. ネイティブアプリケーションを作成 Open the Auth0ダッシュボード とネイティブアプリを作成してください。

  2. __CAPGO_KEEP_0__の許可されたコールバック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ディスカバリをサポートしているプロバイダーがあれば、 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,
},
},
});

ディスカバリが利用できない場合、認証とトークンエンドポイントを手動で設定する必要があります。

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

プラットフォーム固有の注記セクション
  • プラグインは ASWebAuthenticationSession.
  • Set iosPrefersEphemeralSession: true プライベートブラウザセッションを使用する場合、共有クッキーが存在しません。
  • OAuthのリダイレクトは、SchemeとHostでアプリのURLを通じて戻ります。
  • Androidのデープリンク設定と完全に一致するように、プロバイダーのコールバックURLを確認してください。
  • プラグインはOAuthアクティビティをすでに処理しています。アプリが異なるリダイレクトパターンを必要とする場合に限り、カスタムのインテントフィルタを追加してください。
  • ポップアップフローは、シングルページアプリ向けにうまく機能します。
  • リダイレクトフローは、プロバイダーがポップアップをブロックしたり、トップレベルナビゲーションを必要とする認証ルールがある場合に適しています。
  • いくつかのプロバイダーは、CORSを使用して直接ブラウザでトークンを交換することをブロックしています。その場合、バックエンドの交換またはパブリッククライアントを許可するプロバイダーの設定を使用してください。

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

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

  2. code 認証フローを優先する responseType: 'code' 暗黙のフローよりも安全です。

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

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

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

トラブルシューティング

「トラブルシューティング」

providerId is required

「providerId は必須です」

すべての OAuth2 メソッドでは、設定されたプロバイダーのキーが必要です:

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

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

リダイレクト URL の一致性

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

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

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

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

セクション「トークン交換のデバッグ」

有効

プロバイダー設定の「有効」にチェックして、生成されたURLとトークン交換の詳細を表示してください。 logsEnabled: true 関連ドキュメント

__CAPGO_KEEP_0__

一般的な OAuth2 プロバイダーから続ける

「一般的な OAuth2 プロバイダーから続ける」のセクション

Capgo を使用している場合 一般的な OAuth2 プロバイダー 認証とアカウントフローの計画に使用し、Capgo の Capgo の @capgo/capacitor-social-login を使用 Capgo の @capgo/capacitor-social-login のネイティブ機能 Capgo の @capgo/capacitor-social-login の実装詳細 Capgo の @capgo/capacitor-passkey Capgo の @capgo/capacitor-social-login @capgo/capacitor-passkey @capgo/capacitor-native-biometric @capgo/capacitor-native-biometric、 2要素認証 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-native-biometricの実装詳細、