Saltar al contenido

Configuración de Android y verificación del backend

GitHub

En Android, este plugin utiliza Estándar de Google Play Integrity API:

  • prepareIntegrityToken durante prepare()
  • requestStandardIntegrityToken para createAttestation() y createAssertion()
  • App de Android distribuida mediante el ecosistema de Google Play
  • Servicios de Google Play disponibles en el dispositivo
  • Play Integrity API habilitada para tu app
  • Número de proyecto de Google Cloud configurado
  1. Activar Play Integrity API en tu proyecto de Google Cloud.
  2. Abre Play Console y configura el acceso de tu app a Play Integrity.
  3. Proporciona cloudProjectNumber al plugin.
capacitor.config.ts
plugins: {
AppAttest: {
cloudProjectNumber: '123456789012',
},
}

También puedes pasar cloudProjectNumber por llamada en las opciones del método.

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 es un token de Play Integrity y debe decodificarse en el servidor.

  1. El backend crea uno solo challenge.
  2. La app llama a createAttestation({ keyId, challenge }).
  3. El backend llama a Google decodeIntegrityToken API.
  4. El backend verifica al menos:
    • requestDetails.requestHash === base64url(SHA256(challenge))
    • appIntegrity.packageName coincide con el ID de tu app Android
    • appIntegrity.certificateSha256Digest contiene el digest de tu certificado de firma de release
    • los veredictos de integridad coinciden con tu política de seguridad
  1. El backend crea uno solo payload.
  2. La app llama a createAssertion({ keyId, payload }).
  3. El backend decodifica el token y verifica requestHash === base64url(SHA256(payload)).
  4. Aplica la prevención de replay (un solo uso + TTL) y la política de integridad.
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

Registration:

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

Aserción:

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

Continúa desde Configuración de Android y verificación del backend

Sección titulada “Continúa desde Configuración de Android y verificación del backend”

Si estás usando Configuración de Android y verificación del backend para planificar la seguridad y el cumplimiento, conéctalo con Uso de @capgo/capacitor-app-attest para la capacidad nativa en Uso de @capgo/capacitor-app-attest, Cifrado para los detalles de implementación en Cifrado, Cumplimiento para los detalles de implementación en Cumplimiento, Escáner de seguridad de Capgo para el flujo de trabajo del producto en Capgo Security Scanner, y Seguridad de Capgo para el flujo de trabajo del producto en Capgo Security.