__CAPGO_KEEP_0__

OAuth2 の一般的なプロバイダー

GitHub

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

  • GitHub
  • コンテキスト: Capgoのソリューションマーケティングページ。役割: 短いUIラベルまたはナビゲーションアイテム。Capgoの製品/ブランドと開発者用語を完全に保存します。
  • Auth0
  • Auth0
  • Okta
  • Keycloak

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

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

  • OAuthクライアントID
  • アプリのスキームまたはWebコールバックURLに一致するリダイレクトURL
  • 認証エンドポイント
  • 認証フローcodeのためにトークンエンドポイント、またはOIDCディスカバリ issuerUrl 必要なスコープ、例えば
  • 複数のプロバイダーをサポートする設定 openid profile email

Section titled “What you need” is not a text to be translated, it is a heading, so it should be translated as

Multi-provider configuration

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

OIDC discovery and aliases

OIDC discovery and aliases

OAuth2プロバイダーがOpenID Connectのディスカバリードキュメントを公開している場合、Capacitorは自動的に設定を検出します。 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,
},
},
});

OAuth2 と OIDC の一般的なエイリアスもサポートしています。

  • clientId OAuth2 appId
  • authorizationEndpoint OAuth2 authorizationBaseUrl
  • tokenEndpoint OAuth2のエイリアスとして accessTokenEndpoint
  • endSessionEndpoint OAuth2のエイリアスとして logoutUrl
  • scopes OAuth2のエイリアスとして scope

も利用可能:

  • additionalParameters 認証要求のオーバーライド用
  • additionalTokenParameters トークンのエクスチェンジのオーバーライド用
  • additionalResourceHeaders カスタムリソースエンドポイントヘッダ用
  • additionalLogoutParameters そして、 postLogoutRedirectUrl context: Capgo marketing website. Role: Short UI label or navigation item. Seen in: page trust.astro. Message key `and` (And).
  • loginHint, promptログアウトフロー用 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.

オプション種類Required必要
appId / clientId説明文字列OAuth2クライアントID
issuerUrl文字列NoOIDC検出ベースURL
authorizationBaseUrl / authorizationEndpoint文字列Yes*認可エンドポイントURL
accessTokenEndpoint / tokenEndpoint文字列No*トークンエンドポイントURL
redirectUrl文字列Yesコールバック URL
scope / scopes文字列 / 文字列[]No要求されたスコープ
pkceEnabledbooleanNoまたは true
responseType'code' デフォルト値 'token'Noまたは 'code'
resourceUrl文字列Noユーザー情報またはリソースエンドポイント
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ブール値なしiOSでエフェメラルブラウザセッションを優先
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',
},
});

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

Web上でのリダイレクトフロー

使用 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() プラグインが保管しているリフレッシュトークンを使用します。 refreshToken() リフレッシュトークンを自分で渡して、最新のOAuth2レスポンスを取得します。

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

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

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 AD / Microsoft Entra IDの例

Azure AD / Microsoft Entra ID の例

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 の例

Auth0 の例

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

Keycloakの例

Keycloakの例

プロバイダーが公開している場合に、検出を使用してください /.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
idTokenプロバイダーが返した場合のOIDC IDトークン
refreshTokenリフレッシュトークンを取得する場合
resourceData取得した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 ダッシュボード

  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を追加 アプリケーションが使用する正確なコールバック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,
},
},
});

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

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

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

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

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

  2. 暗黙のフローではなく、認証フロー code を優先します。 responseType: 'code' 暗黙のフローは安全ではありません。

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

  4. リフレッシュ トークンを安全に保存します。 Capgoのネイティブアプリ用には、このプラグインを @capgo/capacitor-パーシスティントアカウント.

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

トラブルシューティング

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

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

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

呼び出し SocialLogin.initialize() ログインする前に、 providerId プロバイダの設定で oauth2.

リダイレクトURLの不一致

「リダイレクトURLの不一致」
  • アプリとプロバイダのダッシュボードで、構成済みのリダイレクトURLを文字単位で比較してください。
  • URLの末尾のスラッシュ、スキームの不一致、ホストの異なるチェック
  • モバイルアプリのURLスキームを登録する前にデバイスでテストする

リフレッシュトークンが返されない

「リフレッシュトークンが返されない」のセクション

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

関連ドキュメント logsEnabled: true 「関連ドキュメント」のセクション

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

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

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