Autenticación de solicitudes entre APIs

1

Estoy creando una aplicación ("A") que puede interactuar con una API de datos de terceros ("B"). A es encargado por la Organización “X”, que tiene datos sobre B. Los usuarios de A necesitan acceso a los datos de Org X en B. Sin embargo, B no tiene registro de los usuarios de A.

A y B viven en diferentes servidores y se comunican a través de Internet pública. Los usuarios de A inician sesión con nombre de usuario y contraseña y se les emite un token de acceso que caduca para autenticar las solicitudes HTTP a la API de datos de A. Mi pregunta es cómo proteger mejor las comunicaciones de la API de datos de A a la API de datos de B.

En otras palabras, ¿cuál es la mejor manera de garantizar que las solicitudes a B realmente provengan de A? ¿Debería A almacenar algún tipo de token de portador no caducado que B pueda autenticar?

Tenga en cuenta que los desarrolladores de B acordaron realizar algunas modificaciones a B en un esfuerzo por proporcionar A los datos que necesita, pero las modificaciones deben apuntar a ser menores.

    
pregunta Rich 21.04.2017 - 17:53
fuente

1 respuesta

1

Ya que estas son llamadas de back-end, hay algunas opciones que puede hacer:

  • Certificados : SSL / TLS permite la autenticación mutua, por lo que ambos tienen encriptación y autenticación de extremo a extremo a la vez. Si habilita los certificados de cliente en la API A (y lo marca en B), y viceversa, tiene un túnel fuerte. Además, puede utilizar la fijación de certificados, en cuyo caso puede estar bien utilizar certificados autofirmados. Mientras Api B pueda verificar que la clave privada de A se utilizó para firmar el tráfico enviado, usted tiene esta confianza.

  • Secreto compartido : puede cifrar el tráfico con un secreto compartido entre ambas partes (A y B), por supuesto, esto requiere que tenga secretos sólidos y una política de rotación de claves sana . El secreto compartido actuará como autenticación (es decir, si conoce el secreto, es la parte correcta). Esto podría verse como una clave de API o cualquier cosa que ambas partes conozcan, pero nadie más.

  • Basado en token : puede obtener tokens de portador de un proveedor de identidad general (IdP); que Api A obtendrá con una combinación appID / Secret. El IdP (confiable) creará un token firmado que APi B puede validar y en adelante, confíe en que la solicitud provino de 'A', según lo verificó una tercera parte confiable, a saber, el IdP.

No hace falta decir que Api B debería ser accesible a través de una conexión HTTPS, y como defensa en el departamento, podría ACL dispositivos de red en el medio.

    
respondido por el ndrix 21.04.2017 - 22:28
fuente

Lea otras preguntas en las etiquetas