Skip to main content

AI を使って Auth0 と連携する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使えば、agent skills を利用して、数分で Auth0 の認証を自動的に追加できます。まず、Auth0 agent skills をインストールします。
次に、AI アシスタントに次のように依頼します。
AI アシスタントが、Auth0 アプリケーションの作成、認証情報の取得、Auth0 Angular SDK と Capacitor プラグインのインストール、ディープリンクの設定、ネイティブブラウザー連携によるログイン / ログアウト フローの実装を自動的に行います。詳しくは、Auth0 agent skills をご覧ください。

はじめましょう

このクイックスタートでは、Capacitor を使った Ionic Angular アプリケーションに Auth0 の認証を追加する方法を紹介します。Auth0 Angular SDK と Capacitor のネイティブブラウザープラグインを使用して、ログイン、ログアウト、ユーザープロファイル機能を備えたモバイル対応アプリを作成します。
1

新規プロジェクトを作成する

Capacitor を使って新しい Ionic Angular プロジェクトを作成する
プロジェクトを開く
非推奨の ionic パッケージではなく、@ionic/cli パッケージを使用していることを確認してください。プロジェクト作成時に --npm-client に関するエラーが表示される場合は、CLI を更新してください。
2

Auth0 Angular SDK と Capacitor プラグインをインストールする

Auth0 Angular SDK と、Capacitor の Browser プラグインおよび App プラグインをインストールします:
iOS の Capacitor Browser プラグインは SFSafariViewController を使用します。iOS 11 以降では Safari と Cookie を共有しないため、それらのデバイスでは SSO は機能しません。SSO が必要な場合は、ASWebAuthenticationSession を使用する互換性のあるプラグインを利用してください。
3

Auth0 Appを設定する

次に、Auth0 テナントで新しいアプリを作成し、プロジェクトに環境変数を追加します。Auth0アプリをセットアップするには、次の3つの方法があります。Quick Setupツールを使用する (推奨) 、CLIコマンドを実行する、またはAuth0 Dashboardから手動で設定する方法です。
Native Auth0 App を作成し、適切な設定値があらかじめ入力された環境ファイルをコピーしてください。アプリを作成したら、Auth0 DashboardSettings タブで Allowed Callback URLsAllowed Logout URLs を更新します。YOUR_PACKAGE_ID は、capacitor.config.tsappId に置き換えてください (デフォルト: io.ionic.starter) 。Allowed Callback URLsAllowed Logout URLs:
4

Auth0 モジュールの設定

前の手順で環境ファイルを配置したら、アプリでAuth0モジュールを設定します。
src/main.ts
provideAuth0 の設定には、次の項目が含まれます。
  • useRefreshTokens: true — モバイルでは必須です。Capacitor アプリでは iframe ベースのサイレント認証を使用できないため、セッションの更新にはリフレッシュトークンを使用します。
  • useRefreshTokensFallback: false — モバイルでは必須です。ネイティブアプリでは利用できない iframe ベースのサイレント認証に SDK がフォールバックしないようにします。
  • authorizationParams.redirect_uri — 認証後にアプリへ戻すため、アプリ独自の URL スキームを使用します。
アプリケーションを閉じて再度開いたあとも認証状態を維持するには、cacheLocationlocalstorage に設定するとよい場合があります。ただし、localstorage にトークンを保存するリスクがあることに注意してください。また、Capacitor アプリでは localstorage は一時的なものとして扱う必要があります。Capacitor ドキュメントのストレージに関するガイダンスもご確認ください。
5

Login、Logout、Profile コンポーネントの作成

コンポーネントファイルを作成する
各コンポーネントに以下のコードを追加します:次に、Auth0コールバックを処理するようにAppコンポーネントを更新し、ホームページで作成したコンポーネントを使用します:
src/app/app.component.ts の内容を次のように置き換えます。
src/app/app.component.ts
App Component 内の appUrlOpen イベントのコールバックは、this.ngZone.run() でラップされています。これは必須です。Capacitor プラグインのコールバックは Angular の zone の外で実行されるため、これがないとログイン後の認証状態の変化を Angular が検出できません。詳しくは、Using Angular with Capacitor を参照してください。
6

アプリを実行する

まずはブラウザでテストしてみましょう:
ionic serve を使ってブラウザーで実行する場合、ブラウザーはカスタム URL スキームを処理できないため、カスタム URL スキームのリダイレクトは機能しません。ブラウザーでテストするには、一時的に src/main.tsredirect_urihttp://localhost:8100 に変更し、Auth0 App の Allowed Callback URLsAllowed Logout URLshttp://localhost:8100 を追加してください。ネイティブ向けにビルドする前に、この変更を元に戻すことを忘れないでください。
デバイスまたはシミュレーターで実行するには、まずネイティブプラットフォームを追加します。
次に、ビルド、同期、実行を行います。
実行する前に、npx cap add を使ってネイティブプラットフォームを追加する必要があります。これは各プラットフォームにつき一度だけ行えば十分です。カスタム URL スキームが登録されていることを確認してください (以下の「Advanced Usage」を参照) 。
チェックポイントこれで、localhost上でAuth0 のログインページが完全に動作するようになっているはずです

高度な使い方

--type=angular (--type=angular-standalone ではなく) でプロジェクトを作成した場合、または NgModule を使いたい場合は、AuthModule.forRoot で SDK を設定します。
src/app/app.module.ts
NgModule を使う場合、AuthServiceinject() ではなくコンストラクター (constructor(public auth: AuthService)) で注入してください。テンプレートでは、@if の制御フロー構文ではなく *ngIf="auth.user$ | async as user" を使います。コンポーネントは standalone: true としてマークするのではなく、モジュール内で宣言する必要があります。
実機で authentication をテストするには、各プラットフォームでカスタム URL スキームを登録します。

iOS

ios/App/App/Info.plist にカスタム URL スキームを登録します。
YOUR_PACKAGE_ID は、capacitor.config.tsappId に置き換えてください。詳しくは、Defining a Custom URL Scheme を参照してください。

Android

android/app/src/main/AndroidManifest.xml<activity> タグ内に intent filter を追加します。
YOUR_PACKAGE_ID は、capacitor.config.tsappId に置き換えてください。詳しくは、Create Deep Links to App Content を参照してください。

デバイスでビルドして実行する

または Android の場合:
関数型ガードを使って、認証が必要なルートを保護します。
src/app/app.routes.ts
認証されていないユーザーが保護されたルートに移動すると、authGuardFn は自動的に Auth0 のログインページへリダイレクトします。
HTTP インターセプターを設定して、API 呼び出しにアクセストークンを自動的に付与します。
src/main.ts
次に、Angular の HttpClient を使って API を呼び出します。インターセプターが Bearer トークンを自動的に付与します。
src/app/api.service.ts
httpInterceptor.allowedList は、どの API エンドポイントにアクセストークンを付与するかを決定します。API 用のアクセストークンをリクエストするには、audience パラメーターを含めてください。YOUR_API_IDENTIFIER は、Auth0 Dashboard > APIs にある識別子に置き換えてください。

コールバックURL不一致エラー

解決策: Auth0 Dashboard のコールバックURLが、アプリで生成されるURLと完全に一致していることを確認してください。YOUR_PACKAGE_IDcapacitor.config.tsappId フィールドと一致していることも確認してください。

ログイン後に画面が更新されない

解決策: appUrlOpen イベントのコールバックが this.ngZone.run() で囲まれていることを確認してください。これがないと、Angular は handleRedirectCallback による state の変更を検知できません。Using Angular with Capacitor を参照してください。

「PKCE not allowed」エラー

修正方法:
  1. Auth0 Dashboard > アプリケーション > Your Application に移動します
  2. Application TypeNative に変更します
  3. Token Endpoint Authentication MethodNone に設定します
  4. 変更を保存して、再度お試しください

iOS で SSO が動作しない

Capacitor の Browser プラグインは SFSafariViewController を使用しますが、iOS 11 以降では Safari とクッキーを共有しません。SSO が必要な場合は、ASWebAuthenticationSession を使用する互換性のあるプラグインを利用してください。

ログインは成功するが、アプリを再起動するとユーザーが未認証のままになる

アプリの再起動後も token を保持できるよう、provideAuth0 の設定で cacheLocation: 'localstorage' を有効にしてください。セキュリティ上の影響Capacitor のストレージ制限 に注意してください。

Observable が実行されない

すべての AuthService メソッドはコールド Observable を返します。実行するには .subscribe() を呼び出す必要があります。loginWithRedirect()logout() が何も起きていないように見える場合は、末尾に .subscribe() がついていることを確認してください。

次のステップ

詳細については、以下のリソースをご覧ください。