メインコンテンツへスキップ

iOSのセットアップとバックエンド検証

GitHub

iOSでは、このプラグインは以下を使用します: Apple App Attest を DeviceCheck フレームワーク。

  • iOS 14+
  • 実際のバリデーションフローには実機を推奨
  • App AttestのCapabilityを有効にしたXcodeターゲット
  1. XcodeでiOSアプリのターゲットを開きます。
  2. 以下に移動します: Signing & Capabilities.
  3. クリック + Capabilityを追加 以下を追加します: App Attest.

App Attestを使用するために、 Info.plist 独自のiOS権限設定は不要です。

import { AppAttest } from '@capgo/capacitor-app-attest';
const { keyId } = await AppAttest.prepare();
const attestation = await AppAttest.createAttestation({
keyId,
challenge: 'backend-registration-challenge',
});
const assertion = await AppAttest.createAssertion({
keyId,
payload: 'backend-request-payload',
});

送信 attestation.token と assertion.token をバックエンドに送ります。アプリ内では検証しないでください。

バックエンドのワークフロー (iOS)

「バックエンドのワークフロー (iOS)」セクション
  1. バックエンドで使い捨ての challenge.
  2. アプリが呼び出す createAttestation({ keyId, challenge }).
  3. バックエンドで App Attest の attestation を検証:
    • 証明書チェーンが有効で、Apple App Attestにアンカーされている
    • アプリのIDが、お使いのアプリと一致しています(bundleId、チーム)
    • clientDataHash 一致 SHA256(challenge)
  4. デバイスキーの状態を保存(keyId、公開鍵、および検証用メタデータ)。
  1. バックエンドで使い捨ての payload (またはcanonical request hashの入力)。
  2. アプリが呼び出す createAssertion({ keyId, payload }).
  3. バックエンドは、事前に保存したキーマテリアルを使ってアサーションの署名を検証します。
  4. リプレイ攻撃防止とnonceのTTLチェックを強制します。
sequenceDiagram
participant App as iOS App
participant Plugin as AppAttest plugin
participant Apple as Apple App Attest
participant BE as Backend
BE->>App: one-time challenge
App->>Plugin: prepare()
Plugin->>Apple: generateKey()
Apple-->>Plugin: keyId
App->>Plugin: createAttestation(keyId, challenge)
Plugin->>Apple: attestKey(keyId, SHA256(challenge))
Apple-->>Plugin: attestation token
Plugin-->>App: token + platform + format + keyId
App->>BE: token + challenge + keyId
BE->>BE: verify Apple attestation rules
BE->>App: one-time payload
App->>Plugin: createAssertion(keyId, payload)
Plugin->>Apple: generateAssertion(keyId, SHA256(payload))
Apple-->>Plugin: assertion token
Plugin-->>App: token + platform + format + keyId
App->>BE: token + payload + keyId
BE->>BE: verify signature + replay policy

Registration:

{
"platform": "ios",
"format": "apple-app-attest",
"keyId": "string",
"challenge": "string",
"token": "string"
}

Assertion:

{
"platform": "ios",
"format": "apple-app-attest",
"keyId": "string",
"payload": "string",
"token": "string"
}

使用している場合 iOSの設定とバックエンドでの検証 セキュリティとコンプライアンスを計画するには、これを以下と連携させてください @capgo/capacitor-app-attest の使用方法 @capgo/capacitor-app-attestを使用する場合のネイティブ機能について 暗号化 暗号化の実装詳細について コンプライアンス コンプライアンスの実装詳細について Capgo セキュリティスキャナー Capgo Security Scanner のプロダクトワークフローについては、 Capgo のセキュリティ Capgo Security におけるプロダクトワークフロー向けに。