Skip to main content

AI を使って Auth0 と連携する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントをお使いの場合は、agent skills を利用して、数分で Auth0 認証 を自動的に追加できます。インストール:
続いて、AI アシスタントに次のように依頼します:
AI アシスタントが、Auth0 アプリケーションの作成、資格情報の取得、Auth0 Kotlin Multiplatform SDK の dependency の追加、Android の manifest placeholders と iOS の URL スキームの設定、Login/ログアウト flows の実装までを自動的に行います。agent skills の詳細なドキュメントを読む
このクイックスタートは、Kotlin Multiplatform 2.0 以降、Android SDK 24 以降 (Android 7.0) 、iOS 14 以降でご利用ください。Auth0 Kotlin Multiplatform SDK は現在 1.0.0-beta.0 です。安定版のリリースまでに API が変更される可能性があるため、このバージョンを明示的に固定してください。また、Android Studio (Ladybug 以降) が必要です。iOS ターゲットの場合は、macOS 上の Xcode 15+ も必要です。

はじめる

このクイックスタートでは、Kotlin Multiplatformアプリを構成し、エンドユーザーがAuth0のUniversal Loginを使ってログイン・ログアウトできるようにし、トークンを安全に保存し、ユーザープロファイルを表示する方法を説明します。これらはすべて、AndroidとiOSの両方で動作する共有Kotlinコードから実現できます。
1

新しい Kotlin Multiplatform プロジェクトを作成する

すでに Kotlin Multiplatform プロジェクトをお持ちの場合は、次のステップに進んでください。JetBrains Kotlin Multiplatform ウィザード (AndroidiOS を選択し、Compose Multiplatform で UI を共有) 、または Android Studio の Kotlin Multiplatform プラグインを使用して、Compose UI を共有する新しい Kotlin Multiplatform プロジェクトを作成します。これにより、本ガイド全体で参照する標準的なレイアウトが生成されます。
このガイドでは、アプリケーション ID / バンドル識別子として com.example.app を使用しています。この値は Auth0 のコールバック URL の一部になるため、プレースホルダーをご自身の値に置き換えてください。
2

Gradle を使用して Auth0 SDK を追加

共有モジュールの commonMain ソースセットに Auth0 Kotlin Multiplatform SDK を追加します。このライブラリは Maven Central で公開されているため、追加のリポジトリ設定は必要ありません。composeApp/build.gradle.kts を更新します:
composeApp/build.gradle.kts
包括的なアーティファクトである auth0 には、必要なものがすべて含まれています。フットプリントを小さく抑えたい場合は、代わりに次の個別モジュールを依存関係に指定することもできます: auth0-coreauth0-webauthauth0-authenticationauth0-credentials
3

Auth0 App を設定する

Auth0 で Native アプリケーションを作成し、Android と iOS の両方について、プラットフォーム固有のコールバック URL とログアウト URL を登録します。
  1. Auth0 Dashboard にアクセスします。
  2. アプリケーション > アプリケーション > Create Application を選択します。
  3. ポップアップでアプリの名前を入力し、アプリの種類として Native を選択して、Create を選択します。
  4. アプリケーション詳細ページの設定タブに切り替え、Domain と Client ID をコピーします。これらは後の手順でコードに追加します。
続けて設定タブで、次の URL を設定します。コールバックの形式はプラットフォームごとのスキームによって異なるため、Android 用と iOS 用にそれぞれ 1 つずつ登録してください。Allowed Callback URLs:
許可するログアウト URL:
{yourDomain} を実際の Auth0 ドメイン (例:dev-abc123.us.auth0.com) に、com.example.app をアプリケーション ID / バンドル識別子に置き換えてください。
Allowed Callback URLs は、認証後にエンドユーザーを安全にアプリケーションへ戻すための設定です。一致する URL がない場合、ログインプロセスは失敗します。Allowed Logout URLs は、サインアウト後にユーザーをアプリへリダイレクトさせるための設定です。コールバックの形式には、パッケージ / バンドル識別子が埋め込まれます。Android では SCHEME://YOUR_DOMAIN/android/APPLICATION_ID/callback、iOS では SCHEME://YOUR_DOMAIN/ios/BUNDLE_ID/callback です。既定では、スキームはアプリケーション ID / バンドル識別子と同じ値になります。
重要:コールバック URL に含まれるパッケージ / バンドル名が、applicationId (Android) およびバンドル識別子 (iOS) と完全に一致していることを確認してください。認証に失敗する場合は、これらの値が同一かどうかを確認してください。
4

各プラットフォームでコールバック用スキームを登録する

SDK には RedirectActivity (Android、自動的にマージされます) が同梱されており、iOS では ASWebAuthenticationSession を使ってコールバックを受け取ります。必要な作業は、各プラットフォームで URL スキームを宣言することだけです。Android: Android のビルドファイルに manifest placeholders を追加します。SDK の RedirectActivity がこれらの値を読み取ります:
composeApp/build.gradle.kts
また、AndroidManifest.xml でインターネットの permission を request していることも確認してください:
composeApp/src/androidMain/AndroidManifest.xml
iOS: iosApp/iosApp/Info.plist に URL スキームを登録します (または Xcode → ターゲット → InfoURL Types から登録) :
iosApp/iosApp/Info.plist
5

Auth0 SDK を初期化する

共有のcommonMainソースセットでは、Auth0クライアントを一度だけ作成して再利用します。このクライアントは、Web Auth、Authentication API、資格情報マネージャーが共有するトランスポートを保持します。composeApp/src/commonMain/kotlin/Auth0Config.ktを作成します:
composeApp/src/commonMain/kotlin/Auth0Config.kt
本番環境では、資格情報をソースコードにハードコーディングしないでください。サンプルアプリでは、local.propertiesからauth0.domainauth0.clientIdを読み取り、生成された構成経由で公開しています。DomainとClient IDは、どちらもAuth0 DashboardのApplication Settingsから取得できます。ドメインにhttps://スキームを含めないでください。
6

Login と Logout の実装

Auth0 Kotlin Multiplatform のすべてのメソッドは、Result<Success, Error> を返すコルーチンの suspend 関数です。ドメインエラーで例外がスローされることはありません。Compose の UI から state を監視できるよう、呼び出しを ViewModel でラップしてください。composeApp/src/commonMain/kotlin/AuthViewModel.kt を作成します:
composeApp/src/commonMain/kotlin/AuthViewModel.kt
両プラットフォームで共有する Compose 画面にビューモデルを組み込みます。
composeApp/src/commonMain/kotlin/App.kt
7

ユーザープロファイルを表示する

ログイン後、アクセストークンを使ってAuthentication APIのuserInfoを呼び出し、認証されたユーザーのプロファイルを取得します。
composeApp/src/commonMain/kotlin/AuthViewModel.kt
アプリの起動時に有効な資格情報がすでに存在する場合は、ログイン画面をスキップできます。保存済みで有効期限内のセッションが利用可能な場合、credentialsManager.hasValidCredentials()true を返します。credentialsManager.getCredentials() を使用すると有効なアクセストークンを取得でき、必要に応じてリフレッシュトークンによってアクセストークンが自動的に更新されます。
8

アプリを実行する

各ターゲットでビルドしてローンチします。
想定されるフロー:
  1. アプリが起動し、“Log In” ボタンが表示されます。
  2. “Log In” をタップ → システムブラウザーで Auth0 Universal Login ページが開く → ログインを完了します。
  3. 自動的にアプリに制御が戻り、ボタンが “Log Out” に切り替わります。
  4. 成功です!
チェックポイントこれで、Auth0 によるLogin、ログアウト、セキュアなトークン保存、ユーザープロファイルの取得を備えた Compose Multiplatform アプリが完成しました。認証ロジックはすべて Android と iOS で共有されています。

トラブルシューティングと高度な設定

原因: SDK が生成するコールバック URL が Auth0 アプリケーションに登録されていない、またはスキームやパッケージが一致していません。対処: Application Settings の Allowed Callback URLs が、プラットフォームごとの形式と完全に一致していることを確認してください。Android では SCHEME://YOUR_DOMAIN/android/APPLICATION_ID/callback、iOS では SCHEME://YOUR_DOMAIN/ios/BUNDLE_ID/callback です。SCHEME (既定値: アプリケーション ID) とパッケージ/バンドルは、プロジェクトの値と完全に同一である必要があります。URL は大文字と小文字が区別され、スキームは小文字でなければなりません。
原因: コールバックスキームがプラットフォーム側で宣言されていないため、OS がリダイレクトをアプリに戻せません。対処: Android では、composeApp/build.gradle.ktsmanifestPlaceholders["auth0Scheme"]["auth0Domain"] が設定されていることを確認し、クリーンビルドを実行してください。iOS では、Info.plistCFBundleURLSchemes エントリーがバンドル識別子と一致していることを確認してください。
原因: デバイスが Auth0 テナントに到達できない、またはリクエストがタイムアウトしています。対処: Auth0Accountdomain が、https:// スキームを含まないテナントドメイン (例: your-tenant.us.auth0.com) になっていることを確認してください。実機の場合は、ネットワークに接続できているか確認してください。タイムアウト値は、Auth0Account に渡す NetworkingConfiguration で引き上げられます。
原因: リフレッシュトークンが発行されていないため、期限切れの資格情報を更新できません。対処: Universal Login は既定で offline_access scope を要求します (これによりリフレッシュトークンが返されます) 。LoginOptionsscope を上書きする場合は offline_access を含め、Auth0 Dashboard で該当アプリケーションの Refresh Tokenのローテーション を有効にしてください。
原因: auth0Domain / auth0Scheme の manifest placeholders が指定されていないため、SDK がマージする RedirectActivity にバインドする値がありません。対処: composeApp/build.gradle.ktsdefaultConfig ブロックに両方のプレースホルダーが定義されていることを確認してください。複数のビルドフレーバーを使用している場合は、各フレーバーで定義してください。
Login画面を表示する前に保存された資格情報を確認し、再訪ユーザーが Universal Login をスキップできるようにします:
Auth0 が自社 API 向けの access token を発行するように audience を指定してリクエストします:
Auth0 だけでなく、上流のアイデンティティプロバイダーからもユーザーをログアウトさせます:

次のステップ