はじめに
新しい Flutter プロジェクトを作成する
このクイックスタート向けに、新しい Flutter プロジェクトを作成します。ターミナルで:
- ワークスペースのディレクトリに移動します
- 次を実行します:
flutter create auth0_flutter_sample - プロジェクトディレクトリに移動します:
cd auth0_flutter_sample - IDE で開きます:
- VS Code:
code . - Android Studio:
open -a "Android Studio" .
- VS Code:
Auth0 Flutter SDK をインストールする
Flutter CLI を使用して、プロジェクトに Auth0 Flutter SDK を追加します。これにより、
pubspec.yaml の依存関係に auth0_flutter が追加されます。pubspec.yaml
Auth0 アプリを設定する
次に、Auth0テナントに新しいアプリを作成し、コールバックURLを設定します。Allowed Logout URLs:上記のコールバック設定と同じURLを Allowed Logout URLs フィールドに追加します。Allowed Web Origins (Web Only):Web プラットフォームを対象とする場合は、アプリケーションのURLを追加します。
- Auth0 Dashboard に移動します
- Applications > Applications > Create Application をクリックします
- ポップアップでアプリの名前を入力し、アプリの種類として
Native(Web のみの場合はSingle Page Application) を選択して、Create をクリックします - Application Details ページで Settings タブに切り替えます
- Domain と Client ID の値を控えておきます。後で必要になります
- Android
- iOS
- macOS
- Web
Allowed Callback URLs は、認証後にユーザーを安全にアプリケーションへ戻すための重要なセキュリティ対策です。一致する URL がない場合、ログイン処理は失敗します。Allowed Logout URLs は、サインアウト後にシームレスなユーザー体験を提供するために重要です。一致する URL がない場合、ログアウト後にユーザーはアプリケーションへリダイレクトされません。たとえば、Auth0 のドメインが
example.us.auth0.com で、Android パッケージ名が com.example.myapp の場合、Android のコールバック URL は次のようになります: https://example.us.auth0.com/android/com.example.myapp/callbackアプリケーションを設定する
認証フローを有効にするには、プラットフォームごとの設定が必要です。対象とする各プラットフォームについて、以下の手順に従ってください。
- Android
- iOS
- macOS
- Web
android/app/build.gradle ファイルを開き、android > defaultConfig 内に以下の manifest placeholders を追加します。android/app/build.gradle
{yourDomain} は、自分の Auth0 ドメイン (例: example.us.auth0.com) に置き換えてください。https スキームコールバック URL で https スキームを使用するには、アプリケーションに Android app links を設定します。生体認証を使用する場合 (任意) :生体認証を使用する予定がある場合は、MainActivity.kt を更新して FlutterFragmentActivity を継承するようにしてください。android/app/src/main/kotlin/.../MainActivity.kt
ログインとログアウトを実装する
Universal Login は、アプリケーションに認証を設定する最も簡単な方法です。最適なユーザー体験、高いセキュリティ、そして最も豊富な機能を利用できるため、これを使用することを推奨します。ログインを実装する:ログアウトを実装する:
- Mobile/macOS
- Web
Auth0 Flutter SDK をインポートし、
Auth0 インスタンスを作成します。lib/auth_service.dart
- Mobile/macOS
- Web
lib/auth_service.dart
iOS/macOS: Web: アプリケーションの起動時に
useHTTPS: true パラメーターにより、iOS 17.4+ および macOS 14.4+ で Universal Links が有効になり、セキュリティが強化されます。Android: カスタムスキームを使用している場合は、そのスキームを login メソッドに渡してください。これにより、SDK がログインページへの遷移とアプリへの復帰を正しく処理できます。lib/auth_service.dart
onLoad() を呼び出す必要があります。これにより、Auth0 からのリダイレクト コールバックが処理され、ユーザーがすでに認証済みであればセッションが復元されます。ユーザープロフィール情報を表示
ユーザープロフィールは、ユーザーのログイン時に自動的に取得されます。
Credentials オブジェクトには user プロパティがあり、IDトークンをデコードして取得されたユーザープロフィール情報がすべて格納されます。lib/profile_screen.dart
チェックポイントこれで、Flutter アプリケーションで Auth0 のログイン機能が完全に動作するようになっているはずです。アプリは安全なブラウザベースの認証を使用し、セッションを永続化するための認証情報を自動的に保存します。
トラブルシューティングと高度な使い方
一般的な問題と解決策
一般的な問題と解決策
Callback URL の不一致
症状:"redirect_uri_mismatch" エラーが表示される、または認証が失敗しても何も起こらないように見えます。解決策:- Auth0 Dashboard の Allowed Callback URLs が、アプリの設定と完全に一致していることを確認します
- スキーム (
https://とhttp://) を確認します - パッケージ名 (Android) またはバンドル識別子 (iOS/macOS) が正しいことを確認します
- 末尾のスラッシュがないか確認します
Android: Chrome Custom Tab が開かない
症状:login() を呼び出しても何も起こりません。修正方法:manifestPlaceholdersがbuild.gradleで正しく設定されていることを確認しますAndroidManifest.xmlにインターネット権限が含まれていることを確認します:- Chrome または別のブラウザーがデバイスにインストールされていることを確認します
iOS: 「App で開く」アラート
症状: アプリで開くかどうかを確認するアラートが表示されます。修正方法: これはASWebAuthenticationSession の想定された動作です。これを表示しないようにするには、次のいずれかを使用します。- Universal Links を使用します (iOS 17.4 以降と有料の Apple Developer アカウントが必要です)
- または
useEphemeralSession: trueを設定します (SSO は無効になります) :
Web: ページ更新時にユーザーがログアウトされる
症状: ページを更新すると、ユーザーがログアウトしたように見えます。修正方法:- アプリの初期化時に
onLoad()が呼び出されていることを確認します - キャッシュの保存先として
localStorageの使用を試します: - ドメインが Auth0 Dashboard の Allowed Web Origins に追加されていることを確認します
Web: 「Must run on a secure origin」エラー
症状: ブラウザーのコンソールに secure origin に関するエラーが表示されます。修正方法: Auth0 SPA SDK ではセキュアコンテキストが必要です。localhost (セキュアとして扱われます) を使用するか、HTTPS ドメインにデプロイしてください。ユーザーによって認証がキャンセルされた
エラー処理で適切に処理してください:認証情報の処理
認証情報の処理
エラー処理
エラー処理
高度な Flutter 統合
高度な Flutter 統合
生体認証による認証情報のセキュリティ強化
モバイルで認証情報にアクセスする際に、生体認証を実装します。lib/secure_auth_service.dart
Android: ステップ 4 で設定したとおり、
MainActivity は FlutterFragmentActivity を継承している必要があります。iOS/macOS: Info.plist に NSFaceIDUsageDescription を追加する必要があります。カスタムスコープとオーディエンス
API 用に特定のスコープとオーディエンスを要求します。lib/auth_service.dart
組織 (B2B/Enterprise)
特定の組織内でユーザーを認証します。lib/auth_service.dart
本番環境へのデプロイ
本番環境へのデプロイ
App Store 公開の準備
- シームレスな認証のために Universal Links (iOS) と App Links (Android) を設定する
- 複数のデバイスサイズと OS バージョンでテストする
- ネットワーク障害に対する適切なエラー処理を実装する
- コード難読化を使用する場合は、Android に ProGuard ルールを追加する
- プラットフォーム固有の App Store/Play Store のポリシーに従う
セキュリティに関する考慮事項
- 本番環境での認証情報の保存には、組み込みの Credentials Manager を使用する
- 機密性の高い操作では生体認証を有効にする
- API セキュリティをさらに強化するため、証明書ピンニングを検討する
- 適切なトークン更新処理を実装する
- サポートされているプラットフォームでは、Universal Links に
useHTTPS: trueを使用する