auth0-net-ios について
`.NET` iOS アプリに `Auth0.OidcClient.iOS` で Auth0 認証を組み込むためのエージェント向けスキルです。PKCE によるログインとログアウト、コールバック設定、安全なトークン保存、ビルド確認を案内します。
主な機能
- 01.NET iOS の Auth0 組み込みガイド
- 02PKCE ログインとログアウト
- 03コールバック URL と AppDelegate の設定
- 04安全なトークン保存の案内
- 05ビルドと実機テストのチェックリスト
活用シーン
- 01.NET iOS アプリへの Auth0 ログイン導入
- 02コールバック処理と URL scheme の設定
- 03iOS Keychain へのトークン保存
- 04実機での認証フロー確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ auth0/ agent-skills --skill auth0-net-iosインストール後、Claude Code で/auth0-net-iosを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api.mdintegration.mdsetup.md詳細
auth0-net-ios 統合
.NET iOS アプリケーションに Auth0 認証を追加します。このスキルでは、ASWebAuthenticationSession を使用して PKCE による安全な OIDC ベースのログインおよびログアウトフローを実現する Auth0.OidcClient.iOS NuGet パッケージを統合します。
エージェントへの指示: SDK のセットアップ手順を提示する前に、次のコマンドを実行して最新のリリースバージョンを取得してください。
gh api repos/auth0/auth0-oidc-client-net/releases --jq '[.[] | select(.tag_name | startswith("ios-")) | .tag_name | ltrimstr("ios-")] | .[0]'返されたバージョンを、以下にハードコードされているバージョンの代わりに、すべての依存関係の記述で使用してください。
前提条件
- .NET 8.0 SDK 以降(.NET 9 もサポートされています。その場合は
net9.0-iosターゲットフレームワークを使用してください) - JetBrains Rider または C# Dev Kit を備えた VS Code(iOS ワークロードを含む)
- Xcode 15 以降を搭載した macOS
- iOS 14.0 以降のデプロイメントターゲット
- Native アプリケーションが設定された Auth0 アカウント
- Node.js 20 以降(Auth0 CLI による自動セットアップ用)
使用しないケース
| ユースケース | 推奨されるスキル |
|---|---|
| .NET MAUI クロスプラットフォームアプリ(iOS + Android + Windows) | auth0-maui |
| .NET Android 専用アプリ | auth0-net-android |
| iOS 専用 Swift アプリ | auth0-swift |
| ASP.NET Core サーバーサイド Web アプリ | auth0-aspnetcore-authentication |
| ASP.NET Core Web API(JWT 検証) | auth0-aspnetcore-api |
| React Native モバイルアプリ | auth0-react-native |
クイックスタートのワークフロー
エージェントへの指示: 開始する前に、ユーザーのプロジェクトを確認してください。
.csprojファイルのTargetFrameworkから .NET のバージョンを特定します- 既存の認証実装を確認します。既存のログイン/ログアウトハンドラーを検索し、見つかった場合はそれに接続してください(重複を避けるため、ログインボタンなど既存の UI 要素を再利用してください)
Info.plistまたは.csprojからプロジェクトの Bundle Identifier を確認します- 重複した設定を避けるため、既存の
Auth0ClientまたはAuth0ClientOptionsの使用箇所を探します
- SDK をインストール:
dotnet add package Auth0.OidcClient.iOS - Auth0 を設定:自動または手動での設定については、セットアップガイドを参照してください。
- 認証を統合:
Auth0Clientのインスタンスを作成し、Info.plistに URL スキームを登録して、ログイン/ログアウトを UI アクションに接続します。 - コールバックを処理:
AppDelegateにOpenUrlを実装し、ActivityMediator.Instance.Send(url.AbsoluteString)を呼び出します。 - ビルドして確認:
dotnet build
エージェントへの指示: Auth0Client の設定を記述する際は、次の点に従ってください。
- iOS SDK では Activity コンテキストを渡す必要はありません。
new Auth0Client(options)のみを使用してください。- 必ず
Scope = "openid profile email offline_access"を設定してください。offline_accessスコープはリフレッシュトークンの受け取りに必要であり、ユーザーに再度確認を求めずにサイレントにトークンを更新できます。- コールバック URL は Bundle Identifier から自動的に生成されます:
{BundleId}://{domain}/ios/{BundleId}/callback。- Bundle Identifier は
Info.plistの URL スキームとして登録する必要があります。AppDelegateでOpenUrlを処理し、ActivityMediator.Instance.Send(url.AbsoluteString)を呼び出す必要があります。- トークンを安全に保管してください:ログインに成功した後、iOS Keychain(
SecurityフレームワークまたはKeychainAccessなどのラッパーを使用)にAccessTokenとRefreshTokenを保存してください。トークンをUserDefaultsに保存したり、メモリ内の変数だけに保存したりしないでください。設定とコードを記述したら、ビルドが成功することを確認してください。
dotnet buildビルドが失敗した場合は、問題の修正を試みてください。5~6 回試しても失敗する場合は、ユーザーに助けを求めてください。
WebAuth — 認証の仕組み
SDK は ASWebAuthenticationSession(セキュアなシステムブラウザー)を使用します。LoginAsync() が呼び出されると、次の処理が行われます。
- SDK が PKCE パラメーター(コードベリファイアとチャレンジ)を含む
/authorizeURL を構築します - ASWebAuthenticationSession が開き、Auth0 のログインページが表示されます
- ユーザーが認証します(ログインフォーム、ソーシャル接続、MFA など)
- Auth0 がネイティブコールバック URL にリダイレクトします:
{BundleId}://{domain}/ios/{BundleId}/callback - iOS が URL スキームをインターセプトし、
AppDelegate.OpenUrlに渡します ActivityMediator.Instance.Send(url.AbsoluteString)がトークン交換を完了します- SDK がアクセストークン、ID トークン、リフレッシュトークン、ユーザーのクレームを含む
LoginResultを返します
これは、ネイティブモバイルアプリケーションに推奨される標準的な PKCE 対応 OAuth 2.0 認可コードフローです。
コールバック URL の設定
.NET iOS のネイティブコールバック URL では、Bundle Identifier をスキームとして使用します。形式は次のとおりです。
YOUR_BUNDLE_IDENTIFIER://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_IDENTIFIER/callback
YOUR_BUNDLE_IDENTIFIER はアプリケーションの Bundle Identifier です(例:com.mycompany.myapplication)。たとえば、com.mycompany.myapp://tenant.us.auth0.com/ios/com.mycompany.myapp/callback のようになります。
注: 一部の Auth0 ネイティブ SDK では、
https://{domain}/ios/{bundleId}/callbackまたは{bundleId}.auth0://{domain}/ios/{bundleId}/callbackをコールバック URL の形式として使用します。.NET iOS SDK では、Bundle Identifier を URL スキームとして直接使用します。
コールバック URL が小文字であることを確認してください。
この URL は次の場所に登録する必要があります。
- Auth0 Dashboard の Allowed Callback URLs と Allowed Logout URLs
Info.plistのCFBundleURLSchemesにある URL スキーム
完了条件
-
Auth0.OidcClient.iOSパッケージがインストールされている(最新の安定版) - Auth0Client が Domain、ClientId、および
Scope = "openid profile email offline_access"で設定されている - Bundle Identifier と一致する URL スキームが
Info.plistに登録されている -
AppDelegate.OpenUrlがActivityMediator.Instance.Send(url.AbsoluteString)を使用して実装されている - コールバック URL が Auth0 Dashboard の Allowed Callback URLs と Allowed Logout URLs に追加されている
- iOS Keychain(
SecurityフレームワークのSecKeyChain.Add)を使用してトークンが安全に保存されている - ログイン/ログアウトのフローが動作している
- エラーなしでビルドが成功する
詳細なドキュメント
- セットアップガイド — Auth0 テナントの設定、SDK のインストール、Info.plist の URL スキーム設定
- 統合パターン — ログイン/ログアウトのフロー、トークンへのアクセス、ユーザープロフィール、エラー処理
- API リファレンスとテスト —
Auth0ClientOptionsの完全なリファレンス、クレーム、テストチェックリスト、トラブルシューティング
よくある間違い
| 間違い | 修正方法 |
|---|---|
| Auth0 Dashboard でアプリの種類が Native に設定されていない | Dashboard の設定でアプリケーションの種類を「Native」に変更します |
| Auth0 Dashboard にコールバック URL がない | yourbundleid://{domain}/ios/yourbundleid/callback を Allowed Callback URLs と Allowed Logout URLs の両方に追加します |
| Info.plist に URL スキームがない | Bundle Identifier と一致する CFBundleURLSchemes のエントリーを追加します |
AppDelegate で OpenUrl を処理していない | OpenUrl をオーバーライドし、ActivityMediator.Instance.Send(url.AbsoluteString) を呼び出します |
Domain に https:// プレフィックスを使用している | Domain はホスト名のみを指定します(例:https://tenant.auth0.com ではなく tenant.auth0.com) |
| Activity コンテキストを Auth0Client に渡している(Android のパターン) | iOS ではコンテキストは不要です。new Auth0Client(options) とします |
| URL スキームが Bundle Identifier と一致していない | CFBundleURLSchemes の値は Bundle Identifier と完全に一致する必要があります |
トークンを UserDefaults またはメモリ内のみに保存している | トークンを永続化するには、Security フレームワークの SecKeyChain.Add を介して iOS Keychain を使用します |
テストに関する注意事項
エージェントへの指示: シミュレーターに加えて、物理デバイスでもテストするようユーザーに伝えてください。WebAuth/ASWebAuthenticationSession の動作は、物理デバイスとシミュレーターで異なる場合があります。リリース前に、実機でログイン → コールバック → トークンの一連のフローをテストしてください。
物理デバイスでのテスト:
- ログインフロー:ASWebAuthenticationSession が開く → 認証する → アプリに戻る
- コールバック:AppDelegate で
OpenUrlが正しい URL とともに呼び出される - ログアウトフロー:ブラウザーが開く → セッションがクリアされる → アプリに戻る
- キャンセル:ユーザーがシートを閉じる → アプリが
UserCancelを適切に処理する
関連スキル
- auth0-maui — .NET MAUI クロスプラットフォームアプリ(iOS + Android + Windows)
- auth0-net-android — .NET Android 専用アプリ
- auth0-swift — iOS 専用 Swift アプリ
- auth0-aspnetcore-authentication — ASP.NET Core サーバーサイド Web アプリ
- auth0-aspnetcore-api — JWT 検証機能を備えた ASP.NET Core Web API
クイックリファレンス
using Auth0.OidcClient;
var client = new Auth0Client(new Auth0ClientOptions
{
Domain = "YOUR_AUTH0_DOMAIN",
ClientId = "YOUR_AUTH0_CLIENT_ID",
Scope = "openid profile email offline_access"
});
var loginResult = await client.LoginAsync();
BrowserResultType browserResult = await client.LogoutAsync();
エージェントへの指示: リフレッシュトークンを有効にするため、スコープには必ず
offline_accessを含めてください。これにより、ユーザーに再認証を求めることなく、アプリでアクセス トークンをサイレントに更新できます。エージェントへの指示: ログイン後は、
Securityフレームワークを使用して、トークンを必ず iOS Keychain に永続化してください(SecAccessible.WhenUnlockedThisDeviceOnlyを指定したSecKeyChain.Addを使用します)。トークンをUserDefaultsに保存したり、メモリ内だけに保持したりしないでください。ログアウト時にはトークンをクリアしてください。SecureTokenStorageヘルパークラスの全コードについては、統合パターンを参照してください。
必須のプラットフォーム設定
コールバックを機能させるには、次の 2 つの設定が必要です。コードの全体については、セットアップガイドを参照してください。
- Info.plist:Bundle Identifier に一致する
CFBundleURLSchemesエントリを追加します - AppDelegate:
OpenUrlをオーバーライドして、ActivityMediator.Instance.Send(url.AbsoluteString)を呼び出します
追加パラメーターを指定したログイン、エラー処理、トークン更新、ユーザークレームへのアクセス、および ViewController の完全な例については、統合パターンを参照してください。