mcpField
A
auth0-net-ios

auth0-net-ios

github.com/auth0セキュリティ55221 回インストール1 日前に更新
リポジトリ

auth0-net-ios について

`.NET` iOS アプリに `Auth0.OidcClient.iOS` で Auth0 認証を組み込むためのエージェント向けスキルです。PKCE によるログインとログアウト、コールバック設定、安全なトークン保存、ビルド確認を案内します。

主な機能

  1. 01.NET iOS の Auth0 組み込みガイド
  2. 02PKCE ログインとログアウト
  3. 03コールバック URL と AppDelegate の設定
  4. 04安全なトークン保存の案内
  5. 05ビルドと実機テストのチェックリスト

活用シーン

  1. 01.NET iOS アプリへの Auth0 ログイン導入
  2. 02コールバック処理と URL scheme の設定
  3. 03iOS Keychain へのトークン保存
  4. 04実機での認証フロー確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/auth0/agent-skills --skill auth0-net-ios

インストール後、Claude Code で/auth0-net-iosを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
api.md
integration.md
setup.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

クイックスタートのワークフロー

エージェントへの指示: 開始する前に、ユーザーのプロジェクトを確認してください。

  1. .csproj ファイルの TargetFramework から .NET のバージョンを特定します
  2. 既存の認証実装を確認します。既存のログイン/ログアウトハンドラーを検索し、見つかった場合はそれに接続してください(重複を避けるため、ログインボタンなど既存の UI 要素を再利用してください)
  3. Info.plist または .csproj からプロジェクトの Bundle Identifier を確認します
  4. 重複した設定を避けるため、既存の Auth0Client または Auth0ClientOptions の使用箇所を探します
  1. SDK をインストール:dotnet add package Auth0.OidcClient.iOS
  2. Auth0 を設定:自動または手動での設定については、セットアップガイドを参照してください。
  3. 認証を統合:Auth0Client のインスタンスを作成し、Info.plist に URL スキームを登録して、ログイン/ログアウトを UI アクションに接続します。
  4. コールバックを処理:AppDelegate に OpenUrl を実装し、ActivityMediator.Instance.Send(url.AbsoluteString) を呼び出します。
  5. ビルドして確認: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() が呼び出されると、次の処理が行われます。

  1. SDK が PKCE パラメーター(コードベリファイアとチャレンジ)を含む /authorize URL を構築します
  2. ASWebAuthenticationSession が開き、Auth0 のログインページが表示されます
  3. ユーザーが認証します(ログインフォーム、ソーシャル接続、MFA など)
  4. Auth0 がネイティブコールバック URL にリダイレクトします:{BundleId}://{domain}/ios/{BundleId}/callback
  5. iOS が URL スキームをインターセプトし、AppDelegate.OpenUrl に渡します
  6. ActivityMediator.Instance.Send(url.AbsoluteString) がトークン交換を完了します
  7. 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 は次の場所に登録する必要があります。

  1. Auth0 Dashboard の Allowed Callback URLs と Allowed Logout URLs
  2. 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 つの設定が必要です。コードの全体については、セットアップガイドを参照してください。

  1. Info.plist:Bundle Identifier に一致する CFBundleURLSchemes エントリを追加します
  2. AppDelegate:OpenUrl をオーバーライドして、ActivityMediator.Instance.Send(url.AbsoluteString) を呼び出します

追加パラメーターを指定したログイン、エラー処理、トークン更新、ユーザークレームへのアクセス、および ViewController の完全な例については、統合パターンを参照してください。

参考資料

コメント