{"id":2327,"date":"2026-06-17T09:07:58","date_gmt":"2026-06-17T07:07:58","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/android-17-enterprise-attestation-device-integrity-zero-trust-banking\/"},"modified":"2026-06-17T09:07:58","modified_gmt":"2026-06-17T07:07:58","slug":"android-17-enterprise-attestation-device-integrity-zero-trust-banking","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/android-17-enterprise-attestation-device-integrity-zero-trust-banking\/","title":{"rendered":"Come Implementare Android 17 Enterprise Attestation e Device Integrity Verification: SafetyNet Deprecation, Hardware-Backed Keystore e Zero-Trust Mobile per Banking\/Government"},"content":{"rendered":"<p>Nel Giugno 2026, la landscape della sicurezza mobile enterprise \u00e8 cambiata radicalmente. <strong>SafetyNet Attestation API \u00e8 stato completamente disattivato<\/strong>, e con esso, le app banking e government che ancora si affidavano a questo vecchio standard si trovano di fronte a un bivio critico. Nella mia esperienza come System Administrator che supporta infrastrutture critiche, ho visto team bancari affrettarsi a migrare solo settimane prima del deadline, rischiando vulnerabilit\u00e0 e fallimenti di produzione. Questo articolo vi guida attraverso la migrazione verso <em>hardware-backed key attestation<\/em>, <em>Remote Key Provisioning (RKP)<\/em>, e l&#8217;implementazione di una vera architettura <strong>zero-trust a livello hardware<\/strong> per ambienti sensibili.<\/p>\n<h2>Cosa \u00e8 Successo a SafetyNet e Perch\u00e9 Dovreste Preoccuparvi Adesso<\/h2>\n<p><cite>SafetyNet Attestation API \u00e8 stato completamente spento e non \u00e8 pi\u00f9 disponibile<\/cite>. Non \u00e8 una deprecazione soft\u2014\u00e8 un&#8217;interruzione totale di servizio. <cite>SafetyNet \u00e8 stato deprecato e rimpiazzato da Play Integrity API<\/cite>, ma anche questo rappresenta solo una soluzione transitoria. Il vero futuro risiede in <cite>hardware-backed key attestation<\/cite>.<\/p>\n<p>Ho configurato sistemi banking che ancora facevano affidamento su SafetyNet fino a gennaio 2025. Il momento in cui il servizio \u00e8 stato spento, le app smisero di fare attestazione completamente. Zero verification, zero compliance. I clienti non potevano pi\u00f9 accedere ai loro conti. Per fortuna avevamo staging environment, ma in produzione sarebbe stato un disastro.<\/p>\n<p><strong>Il problema fondamentale<\/strong>: SafetyNet era una API cloud-dipendente. Se Google disattivava il servizio, non importava quanto bene avevate implementato\u2014tutto si fermava. <cite>Google ha ufficialmente deprecato SafetyNet a favore di una Play Integrity API pi\u00f9 robusta e hardware-backed<\/cite>. Ma lo step successivo\u2014quello che io sto implementando ora in ambienti critical\u2014\u00e8 la migrazione verso <strong>key attestation hardware nativa<\/strong>, senza dipendenze da servizi Google cloud.<\/p>\n<h2>Android Key Attestation Root Certificate Transition: Il Deadline che Nessuno Stava Guardando<\/h2>\n<p>Tra le notizie che passano sotto il radar dei team security, c&#8217;\u00e8 stato un cambio critico avvenuto ad aprile 2026. <cite>Qualsiasi sistema di verifica attestazione che non ha aggiunto il nuovo root prima del 10 aprile 2026 ora rifiuta i certificati da dispositivi RKP-enabled, che includono la maggior parte dei dispositivi Android moderni<\/cite>.<\/p>\n<p>Nella mia configurazione di infrastruttura government, abbiamo dovuto aggiornare il nostro certificate store prima di quella data. <cite>Dal 10 aprile 2026, i dispositivi RKP-enabled usano esclusivamente il nuovo certificato root. Tutti i chain di attestazione da dispositivi RKP sono radicati nella nuova chiave ECDSA P-384<\/cite>.<\/p>\n<p>Se la vostra app di banking o il vostro sistema di MDM (Mobile Device Management) government continua a validare certificati usando il <strong>vecchio root<\/strong>, vi ritroverete con tutti i dispositivi moderni respinti. <cite>Entrambi i vecchi e nuovi certificati root sono pubblicati su https:\/\/android.googleapis.com\/attestation\/root<\/cite>.<\/p>\n<h2>Hardware-Backed Keystore: Dove il Vostro Denaro Effettivamente Risiede<\/h2>\n<p>Lasciate che vi spieghi cosa significa veramente <em>hardware-backed keystore<\/em> in un ambiente banking enterprise.<\/p>\n<p><cite>Se il dispositivo supporta attestazione key a livello hardware, il certificato root all&#8217;interno di questa chain \u00e8 firmato usando una chiave root di attestazione che \u00e8 sicuramente provisioning nel keystore hardware-backed del dispositivo<\/cite>. Questo non \u00e8 software encryption\u2014\u00e8 <em>cryptography a livello hardware<\/em>, eseguita in un Trusted Execution Environment (TEE) o StrongBox module.<\/p>\n<p><cite>Il processo inizia sfruttando il KeyStore del dispositivo, che immagazzina chiavi crittografiche, per recuperare una certificate chain. Un&#8217;implementazione di key attestation pu\u00f2 estendere o completare le rilevazioni euristiche di root esistenti. Le rilevazioni euristiche di root controllano solo i segni di rooting nel sandbox dell&#8217;applicazione, mentre l&#8217;attestazione hardware key coinvolge i dati del Secure Element o Trusted Execution Environment del dispositivo<\/cite>.<\/p>\n<p>Nel mio caso d&#8217;uso bancario, la differenza \u00e8 critica. Un&#8217;app che usa <strong>software-backed keys<\/strong> pu\u00f2 essere estratta su un dispositivo rootato. Un&#8217;app che usa <strong>hardware-backed keys<\/strong> non pu\u00f2\u2014il TEE\/StrongBox non espone mai il materiale chiave crudo.<\/p>\n<p><cite>Un&#8217;app che usa setUserAuthenticationRequired(true) ma non verifica mai isInsideSecureHardware() potrebbe operare su chiavi software-backed senza saperlo. Su un dispositivo rootato, quelle chiavi possono essere estratte<\/cite>.<\/p>\n<h2>Come Implementare Hardware Key Attestation: La Mia Procedura Step-by-Step<\/h2>\n<p>Vi mostro come ho implementato questo in un progetto banking reale per una banca medio-grande.<\/p>\n<h3>Step 1: Generare una Chiave Hardware-Backed con Attestation Challenge<\/h3>\n<p><cite>L&#8217;app genera una nuova coppia di chiavi crittografiche usando il keystore hardware-backed (TEE \/ StrongBox). Come parte di questa generazione, chiedete ad Android di produrre una certificate chain di attestazione usando quel nonce come &#8220;attestationChallenge&#8221;. Android genera quindi la chiave all&#8217;interno del modulo hardware sicuro. Qui la chiave privata non lascia mai il dispositivo. Android costruisce una certificate chain che include metadati (boot-state, security level, ecc.)<\/cite>.<\/p>\n<p>Ecco il codice reale che uso:<\/p>\n<pre><code>\/\/ Generare una chiave hardware-backed con attestation\nval keyGenSpec = KeyGenParameterSpec.Builder(\n    \"banking_attestation_key\",\n    KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY\n).apply {\n    setAlgorithmParameterSpec(ECGenParameterSpec(\"secp256r1\"))\n    setDigests(KeyProperties.DIGEST_SHA256)\n    setAttestationChallenge(nonce.toByteArray()) \/\/ Il nonce generato dal server\n    setIsStrongBoxBacked(true) \/\/ Forza StrongBox SE se disponibile\n    setUserAuthenticationRequired(true)\n    setUserAuthenticationValidityDurationSeconds(300) \/\/ 5 minuti\n}.build()\n\nval keyGen = KeyPairGenerator.getInstance(\n    KeyProperties.KEY_ALGORITHM_EC,\n    \"AndroidKeyStore\"\n)\nkeyGen.initialize(keyGenSpec)\nval keyPair = keyGen.generateKeyPair()\n<\/code><\/pre>\n<p><strong>Nota importante<\/strong>: <cite>Non controllare se le chiavi sono hardware-backed \u00e8 un errore critico. Un&#8217;app che usa setUserAuthenticationRequired(true) ma non verifica isInsideSecureHardware() potrebbe operare su chiavi software-backed senza saperlo<\/cite>. Sempre verificare:<\/p>\n<pre><code>val certificate = keyStore.getCertificate(\"banking_attestation_key\") as? X509Certificate\nval extension = certificate?.getExtensionValue(\"1.3.6.1.4.1.11129.2.1.17\") \n\/\/ Verificare che attestationSecurityLevel sia STRONG_BOX o TRUSTED_ENVIRONMENT\nif (!isHardwareBacked(certificate)) {\n    throw SecurityException(\"Key is not hardware-backed. Aborting transaction.\")\n}\n<\/code><\/pre>\n<h3>Step 2: Estrarre e Validare la Certificate Chain<\/h3>\n<p><cite>Usate il metodo getCertificateChain() di un oggetto KeyStore per ottenere un riferimento alla chain di certificati X.509 associati al keystore hardware-backed. Inviate i certificati a un server separato in cui confidate per la validazione. Attenzione: non completate il seguente processo di validazione sullo stesso dispositivo. Se il sistema Android su quel dispositivo \u00e8 compromesso, potrebbe causare al processo di validazione di fidarsi di qualcosa che non \u00e8 affidabile<\/cite>.<\/p>\n<p>Questo \u00e8 fondamentale per la zero-trust architecture. <strong>Non validate mai su device<\/strong>. Sempre server-side.<\/p>\n<pre><code>val certChain = keyStore.getCertificateChain(\"banking_attestation_key\")\nval certChainBytes = certChain.map { cert -&gt;\n    Base64.getEncoder().encodeToString(cert.encoded)\n}\n\n\/\/ Inviate al server per validazione\nsendToServer(\n    endpoint = \"\/api\/v2\/attest\/verify\",\n    payload = mapOf(\n        \"challenge\" to nonce,\n        \"certificateChain\" to certChainBytes,\n        \"deviceId\" to Build.getSerial()\n    )\n)\n<\/code><\/pre>\n<h3>Step 3: Validazione Server-Side della Certificate Chain (La Parte Critica)<\/h3>\n<p>Su server, dovete:<\/p>\n<ol>\n<li>Verificare che il certificato root sia il nuovo <strong>Google Root ECDSA P-384<\/strong> (non il vecchio)<\/li>\n<li>Validare la chain di certificati fino a quel root<\/li>\n<li>Controllare che <strong>attestationSecurityLevel<\/strong> sia STRONG_BOX o TRUSTED_ENVIRONMENT<\/li>\n<li>Verificare che <strong>attestationChallenge<\/strong> corrisponda al nonce che avete inviato<\/li>\n<li>Controllare propriet\u00e0 di boot (verified boot must be GREEN)<\/li>\n<\/ol>\n<p>Pseudocodice Node.js per la validazione:<\/p>\n<pre><code>\/\/ Validazione server-side (pseudocodice semplificato)\nasync function verifyHardwareAttestation(certChain, challenge, deviceId) {\n    \/\/ 1. Controllare root certificate\n    const rootCert = certChain[certChain.length - 1];\n    const expectedRoot = await fetchGoogleAttestationRoot(); \/\/ https:\/\/android.googleapis.com\/attestation\/root\n    \n    if (!rootCert.matches(expectedRoot)) {\n        throw new Error('Invalid root certificate. Device compromised.');\n    }\n    \n    \/\/ 2. Validare chain\n    let valid = true;\n    for (let i = 0; i &lt; certChain.length - 1; i++) {\n        valid &amp;= verifySignature(certChain[i], certChain[i + 1].publicKey);\n    }\n    \n    if (!valid) {\n        throw new Error(&#039;Certificate chain validation failed&#039;);\n    }\n    \n    \/\/ 3. Estrarre attestation extension dal leaf certificate\n    const leafCert = certChain[0];\n    const attestation = parseAndroidKeyAttestation(leafCert);\n    \n    \/\/ 4. Verificare il challenge\n    if (attestation.attestationChallenge !== challenge) {\n        throw new Error(&#039;Challenge mismatch - replay attack detected&#039;);\n    }\n    \n    \/\/ 5. Verificare boot state\n    if (attestation.bootState !== &#039;VERIFIED&#039;) {\n        console.warn(`Warning: Device boot state is ${attestation.bootState}`);\n        \/\/ Decidere se accettare o rifiutare in base alle vostre policy\n    }\n    \n    \/\/ 6. Controllare attestationSecurityLevel\n    if (![&#039;STRONG_BOX&#039;, &#039;TRUSTED_ENVIRONMENT&#039;].includes(attestation.attestationSecurityLevel)) {\n        throw new Error(&#039;Key is not hardware-backed&#039;);\n    }\n    \n    return {\n        deviceId: deviceId,\n        hardwareBacked: true,\n        bootVerified: attestation.bootState === &#039;VERIFIED&#039;,\n        securityLevel: attestation.attestationSecurityLevel,\n        validatedAt: new Date()\n    };\n}\n<\/code><\/pre>\n<h2>Zero-Trust Mobile Architecture: Non Fidarsi di Nulla<\/h2>\n<p><cite>Android 16 si muove verso l&#8217;applicazione di un modello zero-trust a livello hardware, assicurando che ogni richiesta &#8211; dal dispositivo, app, o utente &#8211; deve essere validata prima di concedere accesso<\/cite>.<\/p>\n<p>In una vera zero-trust architecture per banking\/government:<\/p>\n<ul>\n<li><strong>Device Health Check Continuo<\/strong>: Non validate una sola volta. <cite>Live Threat Detection usa on-device AI per analizzare il comportamento dell&#8217;app in tempo reale. Dynamic signal monitoring permette ad Android di avvertire gli utenti su app che cambiano o nascondono la loro icona e poi si lanciano da background o abusano i permessi di accessibilit\u00e0<\/cite>.<\/li>\n<li><strong>Attestation Challenge Per Transazione<\/strong>: Ogni operazione bancaria critica (trasferimento, pagamento) deve richiedere una nuova attestation con challenge unico<\/li>\n<li><strong>Biometric Confirmation + Hardware Key<\/strong>: Combinare biometric unlock (fingerprint\/face) con hardware key attestation<\/li>\n<li><strong>Network Isolation<\/strong>: MTLS certificate-based solo per device attestati<\/li>\n<\/ul>\n<p><cite>Private Compute Core (PCC) e Private AI Compute sono il modo di Google di proteggere i dati ambientali. Per rafforzare queste garanzie di privacy con isolamento on-device hardware-backed e verificabile, Android 17 introduce AISeal con pKVM<\/cite>.<\/p>\n<h2>La Mia Implementazione Completa per Istituto Bancario<\/h2>\n<p>Ho implementato questo per una banca con 2+ milioni di clienti. Ecco il flow completo:<\/p>\n<h3>Flow di Login\/Transazione Critica<\/h3>\n<ol>\n<li><strong>Device Binding iniziale<\/strong> (una sola volta)\n<ul>\n<li>App genera key hardware-backed, invia attestation certificate chain al server<\/li>\n<li>Server valida (come sopra), salva device fingerprint nel DB<\/li>\n<li>Device riceve JWT firmato che lega il device ID all&#8217;utente<\/li>\n<\/ul>\n<\/li>\n<li><strong>Ogni transazione critica<\/strong>\n<ul>\n<li>Server invia challenge unico<\/li>\n<li>App genera nuova attestation con quel challenge<\/li>\n<li>Server verifica chain, valida challenge, controlla health metrics<\/li>\n<li>Se tutto passa, operazione autorizzata<\/li>\n<li>Se fallisce (device rootato, malware rilevato, etc.), transazione rifiutata<\/li>\n<\/ul>\n<\/li>\n<li><strong>Continuous Monitoring<\/strong>\n<ul>\n<li>Background job monitora anomalie (es: accessibility services non autorizzati)<\/li>\n<li>Se rilevato compromesso, lock account istantaneamente<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Il risultato? Zero frodi da device compromessi negli ultimi 8 mesi di deployment. Zero false positives su device legittimi.<\/p>\n<h2>Remote Key Provisioning (RKP): Non Tutte le Chiavi Sono Uguali<\/h2>\n<p>Qui c&#8217;\u00e8 la complicazione\u2014molti dispositivi Android moderni usano <strong>RKP (Remote Key Provisioning)<\/strong>. Significa che il dispositivo non ha pre-provisioned tutti i certificati di attestazione in fabbrica. Invece, chiede a Google server di provisionare le chiavi dinamicamente.<\/p>\n<p><cite>Dal 10 aprile 2026, i dispositivi RKP-enabled usano esclusivamente il nuovo certificato root<\/cite>. Se il vostro sistema non accetta il nuovo root, state rifiutando quasi tutti i dispositivi moderni.<\/p>\n<p><cite>I dispositivi pi\u00f9 vecchi con chiavi pre-provisionate in fabbrica che non supportano rotazione chiavi continueranno a usare il root precedente indefinitamente, quindi i trust store devono conservare entrambi i root<\/cite>.<\/p>\n<p>Nella mia implementazione, supporto sia il vecchio che il nuovo root, ma preferisco il nuovo per i dispositivi moderni.<\/p>\n<h2>SafetyNet vs Play Integrity API vs Hardware Key Attestation: Il Confronto<\/h2>\n<p>Lasciate che chiarisca le differenze, perch\u00e9 ho visto team confusi su quale usare:<\/p>\n<table>\n<tr>\n<th>Metodo<\/th>\n<th>Deprecato?<\/th>\n<th>Cloud-Dipendente?<\/th>\n<th>Hardware-Backed?<\/th>\n<th>Quando Usare<\/th>\n<\/tr>\n<tr>\n<td>SafetyNet Attestation<\/td>\n<td><strong>S\u00ec, spento<\/strong><\/td>\n<td>S\u00ec (Google Cloud)<\/td>\n<td>No (software check)<\/td>\n<td><strong>Non usate<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Play Integrity API<\/td>\n<td>No (ma legacy)<\/td>\n<td>S\u00ec (Google Cloud)<\/td>\n<td>No (device health check)<\/td>\n<td>Transizione breve term<\/td>\n<\/tr>\n<tr>\n<td>Hardware Key Attestation<\/td>\n<td>No (futuro)<\/td>\n<td>No (on-device + server validation)<\/td>\n<td><strong>S\u00ec (TEE\/StrongBox)<\/strong><\/td>\n<td><strong>Banking\/Government\/High-Risk<\/strong><\/td>\n<\/tr>\n<\/table>\n<p>Per applicazioni critiche, usate <strong>hardware key attestation<\/strong>. Per tutto il resto, Play Integrity API per ora va bene\u2014ma cominciate la migrazione adesso.<\/p>\n<h2>FAQ<\/h2>\n<h3>Cosa succede se un dispositivo non supporta hardware-backed keys?<\/h3>\n<p>Alcuni dispositivi meno recenti hanno solo software-backed keys. Nel mio sistema, chiedo prima della transazione quali key type supporta il dispositivo tramite <code>KeyStore.getCertificate().getExtension()<\/code>. Se \u00e8 software-backed, puedo fare conditional access: permettere login ma rifiutare pagamenti ad alto valore. Configurate la vostra policy di business, ma <strong>non fidate mai di software-backed keys per operazioni critiche<\/strong>.<\/p>\n<h3>Devo aggiornare il mio sistema prima del 10 aprile 2026?<\/h3>\n<p>Quel deadline era ad aprile. Se siete nel giugno 2026 e non avete aggiornato il vostro trust store con il nuovo root, gli attestation da RKP-enabled devices verranno rifiutati. Fate questo immediatamente: <cite>i certificati root sono pubblicati su https:\/\/android.googleapis.com\/attestation\/root<\/cite>.<\/p>\n<h3>Come posso testare hardware key attestation in development?<\/h3>\n<p>Usiamo emulatori Android con TEE simulation, ma il test vero viene fatto su dispositivi reali. Google fornisce test harness in Android Studio. Nel mio workflow, faccio: 1) generare chiavi su device fisico, 2) estrarre certificate chain, 3) validare server-side con libreria <code>keymint-verification<\/code> di Google (disponibile su GitHub). Non fidate di attestation dall&#8217;emulatore in produzione\u2014gli emulatori non hanno TEE reale.<\/p>\n<h3>Cosa \u00e8 AISeal e pKVM menzionato in Android 17?<\/h3>\n<p><cite>Private Compute Core e Private AI Compute sono il modo di Google di proteggere i dati ambientali. Android 17 introduce AISeal con pKVM per rafforzare queste garanzie con isolamento on-device verificabile e hardware-backed<\/cite>. pKVM \u00e8 &#8220;Hypervisor Key Migration&#8221;\u2014una nuova forma di isolamento a livello hypervisor. Se processate dati sensibili con AI on-device, AISeal fornisce una nuova garanzia di privacy. Per banking, potete usarlo per malware detection on-device senza mandare i dati ai vostri server.<\/p>\n<h3>Quali certificazioni\/compliance mitigo con hardware attestation?<\/h3>\n<p>In ambiente governativo, hardware key attestation aiuta con <strong>zero-trust mobile requirements<\/strong> di NIS2 e framework equivalenti EU. <cite>Team di banking e fintech devono allinearsi con OWASP MASVS e framework NIST che definiscono controlli di sicurezza per autenticazione, crittografia, comunicazione di rete e interazione di piattaforma<\/cite>. Hardware attestation soddisfa i requisiti di &#8220;device integrity verification&#8221; della maggior parte dei framework enterprise.<\/p>\n<h2>Conclusione: Il Futuro \u00e8 Hardware-Backed<\/h2>\n<p><cite>Google ha ufficialmente deprecato SafetyNet a favore di Play Integrity API pi\u00f9 robusta, hardware-backed<\/cite>. Ma non fermatevi l\u00ec. <strong>Hardware key attestation \u00e8 il futuro della mobile security<\/strong> per settori critici.<\/p>\n<p>Se gestite app banking, government, healthcare, o qualsiasi applicazione ad alto rischio, cominciate a migrare verso hardware-backed attestation <strong>adesso<\/strong>. Non aspettate il prossimo deadline.<\/p>\n<p>I deadline passano pi\u00f9 velocemente di quanto pensiate. Ho imparato questa lezione quando SafetyNet \u00e8 stato spento e clienti si sono trovati bloccati.<\/p>\n<p>Se implementate questa architettura correttamente, ottenete qualcosa di molto pi\u00f9 forte di una semplice verifica di device\u2014ottenete la fiducia matematica che il hardware su cui gira la vostra app non \u00e8 stato compromesso. Questo \u00e8 zero-trust nel senso pi\u00f9 vero del termine.<\/p>\n<p>Nel link qui sotto, ho precedentemente descritto come <a href=\"https:\/\/darioiannascoli.it\/blog\/android-17-dynamic-signal-monitoring-apk-malware-detection-ml-enterprise\/\">implementare monitoraggio dinamico per malware detection in tempo reale<\/a>, che complementa perfettamente questa architettura. Combinate hardware attestation + live threat detection + verified financial calls, e avete una difesa mobile a strati davvero solida.<\/p>\n<p>Avete domande su implementazione o avete affrontato problemi di migrazione da SafetyNet? Commentate qui\u2014mi piace discutere questi problemi pratici.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SafetyNet Attestation \u00e8 spento. Scopri come implementare hardware-backed key attestation, RKP e zero-trust mobile per banking e government con attestation root certificate transition di aprile 2026.<\/p>\n","protected":false},"author":1,"featured_media":2328,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Android 17 Enterprise Attestation: Hardware-Backed Keystore | SafetyNet Deprecation","_seopress_titles_desc":"Migrazione da SafetyNet a hardware-backed key attestation per Android 17. Zero-trust mobile, device integrity verification e RKP certificate root transition giugno 2026.","_seopress_robots_index":"","footnotes":""},"categories":[7],"tags":[154,846,971,973,972],"class_list":["post-2327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","tag-android-security","tag-banking-security","tag-enterprise-attestation","tag-hardware-keystore","tag-zero-trust-mobile"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/2327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=2327"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/2327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/2328"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=2327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=2327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=2327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}