Estoy estudiando la configuración de la autenticación entre dos servicios de aplicación. El servicio A llamará al servicio B, y quiero que el servicio B solo acepte llamadas (http) del servicio A, en ningún otro lugar.
Sé cómo funciona la autenticación JWT y podría implementarlo. Si comprendo correctamente (creo que sí, pero me corrijo si me equivoco), funciona así:
- el servicio A solicita un JWT del servicio B (o un servidor de identidad, pero supongamos punto a punto)
- el servicio B responde con el JWT, firmado con el secreto del servicio B
- el servicio A realiza la llamada al servicio B e incluye el JWT
- el servicio B inspecciona el JWT y puede saber si en realidad fue el servicio A el que realizó la llamada, sin alterar el JWT
¿Pero es realmente necesaria la primera llamada? No podría hacer esto:
- el servicio A firma cada solicitud con la clave privada del servicio A
- el servicio B descifra la solicitud con la clave pública del servicio A
- el servicio B ahora sabe si la solicitud proviene realmente del servicio A
Estaré trabajando sobre https y no tendré necesidad de reclamos. Todo lo que necesito saber es si la solicitud se originó desde el servicio A. Debido a que solo el servicio A puede llamar al servicio B, pero cuando lo hace, tiene acceso a todos los puntos finales de la API (por lo que no es necesario realizar reclamaciones).
Parece más sencillo usar cifrado asimétrico en lugar de JWT, pero me pregunto si es tan seguro, correcto y estándar para hacerlo.