Estoy trabajando en una aplicación que comprende una WebAPI de C # (en los sitios web de Azure) y una aplicación móvil nativa. Esencialmente, un cliente crea una serie de mensajes usando una interfaz web y estos pueden ser explorados en la aplicación móvil. En la actualidad, no hay restricción sobre estos datos.
Una nueva función requiere que algunos clientes puedan proteger sus datos, por lo que solo las personas autorizadas pueden acceder. No queremos usar un nombre de usuario / contraseña ya que la sobrecarga sería demasiado grande. Nuestros clientes pueden tener cientos o miles de personas que desean navegar por sus mensajes.
Mi enfoque iba a ser:
- El usuario crea un servicio a través de nuestro portal web.
- El usuario carga una clave pública en este servicio, que almacenamos.
- El usuario distribuye la clave privada correspondiente mediante un MDM a todos los dispositivos que deseen explorar los mensajes.
- Las solicitudes HTTP para estos mensajes requieren que se presente el certificado.
- La API valida la solicitud usando la clave pública.
Hay dos cosas que me están molestando.
No utilizaremos una CA para verificar la cadena de certificados. Los certificados del cliente pueden ser autofirmados. No veo que esto sea un gran problema ya que sabemos quiénes son nuestros clientes.
Tener la clave privada distribuida en muchos dispositivos podría considerarse algo malo, aunque creo que este escenario es bastante común, por ejemplo. autenticando a MS Exchange. La responsabilidad de proteger la clave privada residiría en el cliente.
Por lo tanto, a mi pregunta: ¿Este enfoque parece correcto?
Además, los sitios web de Azure solo admiten la configuración de activación / desactivación de certificados de clientes, lo que hace imposible combinar llamadas tanto públicas como privadas. Sería bueno tener dos puntos finales, por ejemplo,
Se requeriría inteligencia en las aplicaciones para saber dónde ir, pero facilitaría mucho la configuración de las aplicaciones, ya que o bien tienen el certificado del cliente o no.
Mi pregunta adicional: ¿El uso de dos puntos finales es una práctica común?