For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ja/docs/web/apple-sign-in.md (or send Accept: text/markdown).
Apple サインインを追加
Apple Developer ポータルで App ID、Services ID、Sign in with Apple キーを登録し、クライアントのペアをアプリに組み込みます。
初心者向けのウォークスルー
前提条件:ローカルで動作する Web アプリ(5 分で公開)、実アカウント用の移行済みデータベース(データベースのセットアップ)、そして Apple Developer Program メンバーシップ——モバイルアカウントのガイドで登録するのと同じ年額 99 ドルのアカウントです。まだの場合は、ここを続ける前にその手順を完了してください。以下のデベロッパーポータル内の作業はすべて追加費用なしで行えます。
重要な理由:iOS アプリが Google や GitHub などのサードパーティソーシャルサインインを提供する場合、App Store レビューは Sign in with Apple を要求します。Web でも摩擦の少ない優れたボタンです——Apple ユーザーはデバイス上の既存アカウントでサインインできます。
用語メモ:App ID はアプリの登録識別子(com.yourcompany.yourapp)です。Services ID は、Apple が Web とサーバーのサインイン用に発行する 2 つ目の識別子で、これがクライアント ID になります。リターン URL は、Apple がサインイン済みユーザーを送り返せる正確なアドレス——キットの Better Auth コールバックです。シークレットキーは Apple が一度だけ渡す .p8 ファイルで、これを自分でクライアントシークレットに変換します。
1. Sign in with Apple ケイパビリティを持つ App ID を登録します。2. それを指し、ドメインとリターン URL を保持する Services ID を登録します。3. Sign in with Apple キーを作成し、.p8 ファイルをダウンロードします。4. キーをクライアントシークレットの JWT に変換し、3 つの env 値を設定します。
正直な制限:Apple のリターン URL は、登録済みドメイン上の絶対 https:// アドレスでなければなりません——localhost と素の http は拒否されるため、裸のローカルサーバーではボタンを完全には試せません。デプロイ済み URL で確認するか、https トンネル(たとえば cloudflared tunnel や ngrok)経由でローカルサーバーを公開し、テスト中はトンネルのドメインとそのコールバックを登録してください。
App ID を登録する
1. developer.apple.com/account を開き、Developer Program メンバーシップを持つアカウントでサインインします。
2. Certificates, Identifiers & Profiles → Identifiers を開き、青い + ボタンをクリックします。
3. App IDs → Continue を選択し、タイプは App のまま → Continue。
4. Description: 製品名。Bundle ID: Explicit を選び、逆ドメイン形式の com.yourcompany.yourapp を入力します——iOS アプリを出荷する場合は apps/mobile/app.json の ios.bundleIdentifier と正確に一致させ、両プラットフォームで 1 つの App ID を共有します。
5. ケイパビリティ一覧で Sign in with Apple にチェック → Continue → Register。
期待される結果:識別子が Identifiers 一覧に Sign in with Apple ケイパビリティ有効の状態で表示されます。この 1 つの App ID を再利用します——Services ID とキーの両方が、プライマリアプリとしてこれに紐づきます。
Services ID とリターン URL を登録する
1. Identifiers に戻って再び + をクリックし、Services IDs → Continue を選びます。
2. Description: yourapp web sign-in のようなもの。Identifier: 別の逆ドメイン名——com.yourcompany.yourapp.web が慣例です——App ID とは意図的に異なるものにします。この Services ID が、サーバーが Web サインインに使うクライアント ID です。正確にコピーしてから Continue → Register。
3. 一覧で新しい Services ID を選択し、Sign in with Apple にチェックを入れ、Configure をクリックします。
4. ダイアログで Primary App ID を前のセクションの App ID に設定します。Website URLs にドメイン(たとえば yourdomain.com)を追加し、Return URLs に https://yourdomain.com/api/auth/callback/apple を追加します——このパスはキットの Better Auth コールバック {APP_URL}/api/auth/callback/apple です。Save → Continue → Save。
各リターン URL は登録済みドメイン上の絶対 https:// アドレスでなければなりません:localhost、裸の IP アドレス、http は拒否されます。ローカル開発ではアプリを https トンネルの後ろで動かし、トンネルのドメインを Services ID に追加し、https://<tunnel-domain>/api/auth/callback/apple を登録し、テスト中は APP_URL をトンネル URL に設定します。
期待される結果:Services ID が Sign in with Apple → Enabled と表示されます。ポータルがドメインを拒否する場合は、まずアカウントページでドメイン所有権の検証を完了してください。
Sign in with Apple キーを作成する
1. 左サイドバーの Keys → + を開きます。キーに名前を付け(たとえば yourapp sign-in key)、Sign in with Apple にチェックを入れ、Configure をクリックし、App ID を Primary App ID として選択 → Save → Continue → Register。
2. 確認画面で Key ID を控え、Download をクリックします——.p8 ファイルが提供されるのは一度だけです。失くした場合はキーを取り消して別のものを作成します。Apple はコピーを保持しません。
3. Team ID も控えます——デベロッパーアカウントページの右上隅、アカウント名の隣に表示されています。
期待される結果:.p8 ファイル、Key ID、Team ID の 3 つの値が揃いました。.p8 ファイルは Git に入れないでください。これはあなたのデベロッパーアカウントとして署名します。
値をアプリに追加する
キットが期待するのは以下の 3 行だけです——すべてのソーシャルプロバイダーが使うのと同じ clientId/clientSecret のペアです。APPLE_CLIENT_ID は App ID ではなく Services ID(com.yourcompany.yourapp.web)です。
Apple は静的なクライアントシークレットを発行しないため、APPLE_CLIENT_SECRET は Team ID、Key ID、.p8 秘密鍵から自分で署名する JWT です——Better Auth のドキュメントにその短い生成スクリプトが同梱されています。署名済みシークレットの有効期間は最長 6 か月です:再生成して env 値を更新するリマインダーを設定してください。失効した瞬間にサインインは失敗します。.p8 ファイルの中身や生の Key ID を env に貼り付けないでください——そこに入れるのは生成した JWT だけです。
クライアントシークレットと .p8 ファイルはサーバー専用です:NEXT_PUBLIC_/EXPO_PUBLIC_ 変数には決して入れず、コミットもしません——本番ではホストのシークレットストア経由で設定します。編集後は開発サーバーを再起動してください。env の変更は起動時に読み込まれます。
# apps/web/.env.local
AUTH_APPLE_ENABLED=true
APPLE_CLIENT_ID=com.yourcompany.yourapp.web # the Services ID, not the App ID
APPLE_CLIENT_SECRET=<JWT signed with Team ID + Key ID + .p8>確認とトラブルシューティング
APP_URL——デプロイ済み URL または https トンネル——の /auth を開き、Apple ボタンをクリックし、任意の Apple ID(デベロッパーアカウントである必要はありません)でサインインし、サインイン状態で戻ってくることを確認します。
失敗のほとんどは 3 つの取り違えのいずれかです:Services ID と App ID の混同——クライアント ID は Web サインイン用の Services ID でなければなりません。リターン URL の不一致——コールバックはプロトコル・ドメイン・パスを含めて登録済み Return URL と正確に一致する必要があります。または期限切れ/無効なクライアントシークレット——JWT を再生成してください。これは署名付きトークンであり、.p8 の中身ではありません。
AUTH_APPLE_ENABLED=true を設定するまで、/auth の Apple オプションは無効のままです——env 名を確認して再起動してください。APPLE_CLIENT_ID と APPLE_CLIENT_SECRET の両方なしにフラグを有効にすると起動が失敗し、不足している変数が名指しされます。
iOS アプリも同じこのバックエンドに到達します——他のソーシャルボタンを App Store レビューが受け入れるように、その中にも Sign in with Apple を載せてください。レビューが何を見るかはモバイルアカウントのガイドが説明しています。
設定を続けるには、Stripe 決済を追加をご覧ください。