En general, recomendaría HMAC a menos que tenga requisitos particulares para los certificados de cliente. Las razones son:
Vencimiento
Si bien es cierto que no hay una caducidad obligatoria con HMAC, en realidad, debe caducar cualquier tipo de contraseña / secreto / clave de cifrado de forma regular. Esto se aplica mediante certificados, pero debe hacerlo como una cuestión de política para cualquier clave de este tipo. No creo que este sea un verdadero profesional para HMAC.
Intermediarios
Si tiene algún intermediario como un Firewall de aplicaciones web que necesita inspeccionar solicitudes, puede ser complejo usar certificados de cliente. Esta es una estafa para certificados de cliente y un profesional para HMAC.
Complexity
¿Es realmente tan complejo crear un HMAC? Hay bibliotecas de clientes para hacer esto para Ruby, Java, .Net, Node y Python. Dejé de buscar en Google, pero estoy seguro de que las plataformas más modernas tienen una biblioteca existente. Probablemente este es un profesional para los certificados como dijiste, pero en mi opinión es relativamente menor.
Familiaridad
HMAC se usa en algunas API populares de diferentes sectores del mercado (por ejemplo, Twitter, AWS, Xero). Creo que los certificados de clientes son relativamente poco frecuentes fuera de la configuración de la empresa. Este es un profesional para HMAC y una estafa para certificados de clientes. Descargo de responsabilidad: Esto es subjetivo. No tengo pruebas sólidas de esto, solo se basa en lo que he experimentado en la práctica.