跳过内容

Android Setup & Backend Verification

Android 原生系统使用

标题:Android 原生系统使用

在 Android 上,这个插件使用 Google Play 敏感度标准 API:

  • prepareIntegrityToken 期间 prepare()
  • requestStandardIntegrityToken 用于 createAttestation()createAssertion()
  • 通过 Google Play 生态系统分发的 Android 应用
  • 设备上可用的 Google Play 服务
  • 为您的应用程序启用 Play Integrity API
  • 已配置 Google 云端平台项目号

Google 设置

Google 设置
  1. 启用 在您的 Google 云端平台项目中启用 Play Integrity API 打开 Play 控制台并为您的应用程序配置 Play Integrity 访问权限。
  2. 向插件提供
  3. __CAPGO_KEEP_0__ 配置 cloudProjectNumber 配置

Capacitor 配置

Capacitor 配置
capacitor.config.ts
plugins: {
AppAttest: {
cloudProjectNumber: '123456789012',
},
}

您也可以通过 cloudProjectNumber 在方法选项中每次调用一次。

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

token 是一个Play Integrity令牌,必须在服务器端解码。

  1. 后端创建一次性 challenge.
  2. App调用 createAttestation({ keyId, challenge }).
  3. 后端调用Google decodeIntegrityToken API.
  4. 后端验证至少:
    • requestDetails.requestHash === base64url(SHA256(challenge))
    • appIntegrity.packageName 等于您的Android应用程序ID
    • appIntegrity.certificateSha256Digest 包含您的发布签名证书摘要
    • 完整性判决与您的安全策略匹配
  1. 后端创建一次性 payload.
  2. App调用 createAssertion({ keyId, payload }).
  3. 后端解码令牌并检查 requestHash === base64url(SHA256(payload)).
  4. 强制防止重放 (单次使用 + TTL) 和完整性判决策略。

Android schema

Android schema
sequenceDiagram
participant App as Android App
participant Plugin as AppAttest plugin
participant PlaySDK as Play Integrity SDK
participant BE as Backend
participant Google as decodeIntegrityToken API
App->>Plugin: prepare(cloudProjectNumber)
Plugin->>PlaySDK: prepareIntegrityToken()
PlaySDK-->>Plugin: provider handle (keyId)
BE->>App: one-time challenge
App->>Plugin: createAttestation(keyId, challenge)
Plugin->>PlaySDK: requestStandardIntegrityToken(requestHash)
PlaySDK-->>Plugin: integrity token
Plugin-->>App: token + platform + format + keyId
App->>BE: token + challenge + keyId
BE->>Google: decodeIntegrityToken(token)
Google-->>BE: decoded payload
BE->>BE: verify requestHash + app identity + verdicts
BE->>App: one-time payload
App->>Plugin: createAssertion(keyId, payload)
Plugin->>PlaySDK: requestStandardIntegrityToken(requestHash)
PlaySDK-->>Plugin: integrity token
App->>BE: token + payload + keyId
BE->>Google: decodeIntegrityToken(token)
Google-->>BE: decoded payload
BE->>BE: verify requestHash + replay policy

最小后端载荷合同

注册:

复制到剪贴板

{
"platform": "android",
"format": "google-play-integrity-standard",
"keyId": "string",
"challenge": "string",
"token": "string"
}

复制到剪贴板

{
"platform": "android",
"format": "google-play-integrity-standard",
"keyId": "string",
"payload": "string",
"token": "string"
}

如果您正在使用 Android Setup & Backend Verification 来规划安全性和合规性,连接它与 使用 @capgo/capacitor-app-attest 为 Using @capgo/capacitor-app-attest 中的原生功能 加密 为加密的实现细节 合规 为合规的实现细节 Capgo 安全扫描器 为 Capgo 安全扫描器 中的产品工作流程 Capgo 安全 为产品工作流程在 Capgo 安全中