Estoy trabajando en una API que está destinada a ser consumida por otro sistema. Los datos no son propiedad de la máquina solicitante y los usuarios a los que pertenecen los datos no están impulsando la transacción. Puede pensar que es el mismo caso de uso que un servicio web de un hospital que transfiere datos confidenciales y que las personas que poseen los datos no participan en la transacción. O un servicio web bancario que se utiliza para realizar consultas analíticas contra una gran cantidad de datos del usuario, pero los usuarios en los datos no están impulsando la transacción.
Problema
Estoy investigando autenticación y amp; Opciones de autorización para este caso de uso, pero casi todos los documentos que encuentro para asegurar las API saltan a OAuth 2 y, a veces, a OpenID Connect. No creo que ninguno de los dos sea aplicable, si leo los RFC correctamente. Parece que se centran en delegar la autenticación a un tercero con la suposición de que un usuario se autenticará.
Solución que estoy considerando
He estado considerando un token HMAC en el encabezado de Autorización de la solicitud en la que los detalles de la solicitud están codificados y firmados con una clave que la aplicación cliente recibió una vez. El mismo flujo que el esquema de autenticación de AWS para sus apis. Lo único en lo que puedo pensar es más seguro que esto: intercambiar claves de cifrado públicas y hacer que el cliente encripte la solicitud con mi clave pública y que yo encripte la respuesta con la suya (PGP / RSA Encryption). Cualquiera de las opciones sería sobre TLS con verificación de certificado. ¿Estoy reinventando la rueda aquí? ¿Hay algún estándar comparable de reglas a seguir para este caso de uso?
Nota lateral sobre el cifrado sobre SSL
Una vez escuché que se hizo notar que el cifrado sobre SSL era redundante. Acabo de ver a Moxie Marlinspike desarmar el SSL en Defcon a través de un hombre en el medio y una cadena de certificados de suplantación de identidad. Definitivamente, existe una gran diferencia entre el proceso de intercambio de certificados incluido en SSL que ocurre en cada sesión y el que solo se lleva a cabo una vez por lo que mencioné anteriormente.