Tome el siguiente caso como ejemplo.

Tiene una capa de API RESTful protegida con OAuth2. Por otro lado, para permitir que los usuarios se autentiquen en sus API, debe solicitar un token de acceso (es decir, grant_type=password).

Para solicitar un token de acceso con contraseña, la aplicación cliente requiere un Cliente OAuth (par clave + secreto).

Ahora ha configurado todo para utilizar la integración continua y la implementación continua .

Durante una compilación de desarrollo, la secuencia de comandos de compilación crea datos de prueba, incluidos los clientes OAuth . Obviamente, si una compilación crea datos de prueba, previamente elimina todos los datos creados durante las pruebas automatizadas.

Por lo tanto, querrá que su aplicación cliente use uno de los clientes OAuth y querrá evitar codificar uno de ellos, porque se crean utilizando la infraestructura de API, por lo que se vuelven a crear desde cero. en cada construcción.

Piense que el front-end y el back-end están construidos por diferentes scripts de construcción.

Conclusión y pregunta

¿Cuál sería un buen enfoque para compartir secretos entre el servidor y la infraestructura del cliente, de modo que ambos se pongan en marcha y estén sincronizados con los mismos secretos de seguridad?

Algunas ideas

  1. Variables de entorno del sistema operativo. Podría almacenar esos secretos en las variables de entorno de la máquina de compilación. Es decir, la infraestructura del cliente siempre se construirá e implementará con la mayoría de los secretos actualizados.

  2. Igual que el n. ° 1, pero almacenando esos secretos en un directorio compartido en la máquina de compilación.

0
Matías Fidemraizer 15 dic. 2016 a las 16:11

2 respuestas

La mejor respuesta

Finalmente terminé con el directorio de compilación común para almacenar un archivo JSON con el último enfoque de credenciales donde ambas compilaciones pueden acceder a él. Cada ejecución de compilación de backend conserva un archivo JSON que contiene todas las credenciales, y la compilación de frontend se basa en todo el archivo.

De todos modos, probé el enfoque de las variables de entorno, pero dado que ambas compilaciones se ejecutan en el mismo agente de compilación TFS, la compilación del cliente no pudo ver los cambios de las variables de entorno a menos que se reiniciara todo el servicio del agente.

0
Matías Fidemraizer 19 dic. 2016 a las 07:45

Con respecto al sistema de compilación TFS / VSTS (TFS 2015 o posterior) / lanzamiento (TFS 2017 o VSTS), solo necesita marcar la opción Permitir que los scripts accedan a la ficha OAuth Token en Opciones / pestaña General de la definición de compilación o el entorno de lanzamiento, luego puede obtener Acceso Token de OAuth usando $ (System.AccessToekn) en cada tarea.

enter image description here

enter image description here

Con respecto a otros sistemas, el mejor enfoque es almacenar el token de acceso en las variables de entorno del sistema y eliminarlo al final, que es similar al valor de la variable de compartir para otras tareas de compilación / lanzamiento usando " ## vso [task.setvariable variable = testvar;] testvalue " (PowerShell) en TFS o VSTS.

Por otro lado, puede almacenar el token de acceso cifrado en el entorno del sistema por seguridad, luego descifrarlo y usarlo.

0
starian chen-MSFT 18 dic. 2016 a las 02:48