Envío de credenciales en cada solicitud

2

Voy a utilizar un paquete de Symfony SMB como este para explorar un sistema de archivos de Windows a través de PHP.

Para hacer esto: crearé una API web que devolverá una lista de archivos y directorios en un directorio para que pueda navegar a través del contenido de un recurso compartido de red.

Como tendré que autenticarme con LDAP cada vez que realice la conexión, ¿cuál es la mejor manera de enviar el nombre de usuario y la contraseña de LDAP del usuario cada vez?

¿Es seguro almacenar una clave privada en el servidor en una base de datos con el nombre de usuario, que se usa para cifrar una cadena, por ejemplo? (username: password: timestamp: ipaddress) y luego haga que el cliente envíe esa cadena cifrada con cada solicitud utilizando HTTPS para que el servidor descifre y use las credenciales; después de cada solicitud, se cambiará la clave privada. Si la marca de tiempo ha caducado, la rechazará, si la dirección IP no coincide, la rechazará, etc.

¿O existe una forma mejor / más segura de autenticarse con credenciales cada vez sin que el usuario tenga que volver a ingresar para cada solicitud?

    
pregunta Daniel Few 22.01.2018 - 21:08
fuente

2 respuestas

3

Lo primero que debe hacer es verificar si existe algo que pueda usar en lugar de intentar rodar su propio marco de autenticación / autorización. ¿Vas a ir a la web? Entonces mira OAuth 2.0 o OpenID. Si tienes que rodar el tuyo, entonces:

Evite enviar credenciales si puede, en lugar de eso, envíe un token que pueda usarse para verificar las credenciales. El token firmado con un valor hash que se puede usar para representar el secreto.

Una vez que su token se genera, guárdelo en el cliente de una manera segura y envíelo por solicitud.

    
respondido por el McMatty 22.01.2018 - 21:46
fuente
0

Creo que en teoría usted podría obtener un ticket de Kerberos para las credenciales y usarlo para acceder al servicio de archivos, sin embargo, aunque Microsoft está adoptando cada vez más protocolos abiertos, no todas las API están expuestas, y qué Existe poca documentación con terminología muy propietaria. Así que en la práctica eso no va a funcionar.

La creación de una instancia de Daemon para mantener abierta la sesión SMB entre las solicitudes http es un proceso que no se inicia, aunque el uso de sockets web para mantener una conexión persistente es viable, pero esto requiere que implemente mucho más de su aplicación en JavaScript y requiera una Gran cantidad de código personalizado para administrar los servidores.

Acabo de ir con un buen http anticuado.

Por lo tanto, necesita un medio para recuperar el texto claro de la contraseña SMB para cada solicitud, pero para una buena seguridad no desea que el texto claro persista entre las solicitudes. Una forma de lograrlo sería almacenar la contraseña encriptada en el servidor (opcionalmente empaquetada con otros metadatos) usando una clave almacenada en el cliente (pero enviada con cada solicitud, por ejemplo, una cookie). Esto es realmente bastante fácil de hacer con un controlador de sesión personalizado en php.

Aquí hay uno que preparé anteriormente.

    
respondido por el symcbean 21.02.2018 - 23:13
fuente

Lea otras preguntas en las etiquetas