Nel complesso, consiglierei HMAC se non si hanno requisiti particolari per i certificati client. I motivi sono:
Scadenza
Anche se è vero che non esiste una scadenza obbligatoria con HMAC, in realtà, è necessario scadere regolarmente qualsiasi tipo di password / chiave segreta / crittografica. Questo è applicato dai certificati, ma dovresti farlo come criterio per qualsiasi chiave di questo tipo. Non penso che questo sia un vero professionista per HMAC.
Intermediari
Se si dispone di un intermediario come un firewall di applicazioni Web che deve ispezionare le richieste, può essere complesso utilizzare i certificati client. Questo è un con per i certificati client e un professionista per HMAC.
Complessità
È veramente così complesso da creare un HMAC? Ci sono librerie client per fare questo per Ruby, Java, .Net, Node e Python. Ho smesso di fare ricerche su Google, ma sono sicuro che le piattaforme più moderne hanno una biblioteca esistente. Questo è probabilmente un professionista per i certificati, come hai detto, ma relativamente secondario a mio parere.
La familiarità
HMAC è in uso in alcune API diffuse provenienti da diversi settori di mercato (ad esempio Twitter, AWS, Xero). Penso che i certificati client siano relativamente rari al di fuori delle impostazioni aziendali. Questo è un pro per HMAC e un cono per i certificati client. Disclaimer: questo è soggettivo. Non ho prove concrete per questo: si basa solo su ciò che ho sperimentato nella pratica.