DEV Community

Edison Flores
Edison Flores

Posted on

Cómo verifico 8 formatos de credenciales con una sola API (ATC, JWT, W3C VC, A2A, EAT-AI, ZTA, MCP, X.509)

El problema de los 8 formatos

Si construyes un agente IA hoy, vas a recibir credenciales de muchos lugares:

  • Un MCP server que te pasa una "MCP Server Card"
  • Un agente de Google A2A que te pasa una "A2A card"
  • Un servicio W3C VC que te pasa un "Verifiable Credential"
  • Un legacy system que te pasa un X.509
  • Un JWT OAuth estándar
  • Un EAT-AI token (Entity Attestation Token)
  • Un ZTA card (Zero Trust Agent)
  • Un ATC v3 (Agent Trust Card)

Cada formato tiene su propia estructura, su propia firma, su propio esquema de revocación. Si quieres soportar los 8, tendrías que mantener 8 verificadores distintos.

UTA los unifica.

La API

# Detecta el formato automáticamente y verifica
curl -X POST https://www.marketnow.site/api/trust?action=verify \
  -H "Content-Type: application/json" \
  -d '{"card": "<cualquier formato>"}'
Enter fullscreen mode Exit fullscreen mode

Respuesta:

{
  "decision": "PERMIT",
  "detected_format": "JWT",
  "issuer": "did:web:alice.example",
  "expires_at": "2026-12-31T23:59:59Z",
  "stages": {
    "PARSER": "OK",
    "DETECT": "JWT",
    "SCHEMA": "OK",
    "CRYPTO": "OK",
    "ISSUER": "did:web:alice.example",
    "KEY_BINDING": "OK",
    "POP": "OK",
    "PROVENANCE": "DIRECT",
    "LIFECYCLE": "ACTIVE",
    "EVIDENCE": "LOGGED",
    "POLICY": "PASS",
    "DECISION": "PERMIT"
  },
  "failed_stage": null
}
Enter fullscreen mode Exit fullscreen mode

Cómo funciona la detección

La etapa DETECT usa heurísticas simples pero efectivas:

  • Si empieza con eyJ → JWT
  • Si tiene @context con https://www.w3.org/2018/credentials/v1 → W3C VC
  • Si tiene mcp_server_card_v1 → MCP Card
  • Si tiene a2a_protocol_v1 → A2A card
  • Si tiene eat_profile → EAT-AI
  • Si tiene zta_v1 → ZTA
  • Si tiene atc_v3 → ATC v3
  • Si empieza con -----BEGIN CERTIFICATE----- → X.509

Una vez detectado, el pipeline enruta a la lógica específica del formato.

Translate: de un formato a otro

UTA también puede traducir entre formatos:

curl -X POST https://www.marketnow.site/api/trust?action=translate \
  -H "Content-Type: application/json" \
  -d '{
    "card": "<JWT aquí>",
    "target_format": "W3C_VC"
  }'
Enter fullscreen mode Exit fullscreen mode

Esto te permite recibir un JWT y emitir un W3C VC equivalente, preservando issuer, subject, scope, y vigencia.

Bridge: verificar en un ecosistema, emitir en otro

El endpoint bridge:

curl -X POST https://www.marketnow.site/api/trust?action=bridge \
  -H "Content-Type: application/json" \
  -d '{
    "card": "<JWT de ecosistema A>",
    "target_format": "MCP_CARD",
    "target_issuer": "did:web:bridge.example"
  }'
Enter fullscreen mode Exit fullscreen mode

Verifica la credencial en ecosistema A (JWT) y, si pasa, emite una credencial equivalente en ecosistema B (MCP Card). Útil cuando un agente de un ecosistema necesita hablar con un agente de otro.

Benchmarks

Operación Latencia
Detect 0.02ms
Verify (JWT) 0.15ms
Verify (W3C VC) 0.18ms
Verify (MCP Card) 0.16ms
Translate 0.25ms
Bridge 0.35ms

Throughput: 6,744 verificaciones/segundo en un solo núcleo.

Implementación en tu código

import { verify, translate, bridge } from '@marketnow/trust-core';

// Verificar
const result = await verify(card);
if (result.decision !== 'PERMIT') {
  throw new Error(`Trust failed at ${result.failed_stage}`);
}

// Traducir
const w3cVC = await translate(jwtCard, 'W3C_VC');

// Bridgear
const mcpCard = await bridge(jwtCard, 'MCP_CARD', 'did:web:bridge.example');
Enter fullscreen mode Exit fullscreen mode

Conclusión

La interoperabilidad no es un feature, es el feature. Si tu agente solo soporta un formato de credencial, estás construyendo un silo. UTA te da los 8 formatos en una sola llamada.


Repo: alicelabs-llc/universal-trust-adapter · API: marketnow.site/api/trust

Top comments (0)