Utilización de Keycloak para Single Sign-On (SSO)
Single Sign-On se trata de un inicio de sesión unificado. Consiste en un procedimiento de autenticación que habilita a un usuario concreto acceso a distintos sistemas con una sola instancia de identificación.
Una herramienta sencilla que podemos utilizar para configurarnos un SSO que poder utilizar en nuestras aplicaciones se trata de Keycloak.
Ejemplo de uso:
Paso 1 – Ponemos iniciar keycloak mediante su imagen Docker mediante el siguiente comando:
docker run -p 8081:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=password jboss/keycloak -Dkeycloak.profile.feature.docker=enabled -b 0.0.0.0
Una vez iniciado podemos acceder a la aplicación mediante la url:
http://localhost:8081/auth/admin/master/console/
Paso 2 – Vamos a configurar un usuario y un cliente para poder probar el acceso:
Paso 2.1 – Crear Realm
Creación de un Realm
Pantalla de edición de un Realm
Paso 2.2 – Crear Client (es la aplicación que se va a conectar)
Creación de un cliente
Pantalla de edición de un cliente
Paso 2.3 – Crear User y Rol (Se trata del usuario que se va a conectar y un rol que va a tener asignado)
Creación de un rol
Creación de un usuario
Pantalla de asignación del rol al usuario creado
Paso 3 – Prueba obtención token.
curl --example --request POST 'http://localhost:8081/auth/realms/disastercode/protocol/openid-connect/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=password' --data-urlencode 'client_id=appClient' --data-urlencode 'client_secret=7YXN4WL8n3d0LUYejWGJWpG3xyJPUaPE' --data-urlencode 'username=admin' --data-urlencode 'password=admin'
Petición con postman
Dockers para Oracle, OpenLdap y JBoss
– Docker para la version de Oracle Standard Edition 12c Release 2 >>> https://github.com/MaksymBilenko/docker-oracle-12c
Este contenedor te permite utilizar una base de datos de oracle desde un contenedor. Esta en docker hub. Puedes ejecutarlo con el comando:
docker run -d -p 8080:8080 -p 1521:1521 quay.io/maksymbilenko/oracle-12c
Y los datos de acceso serían:
hostname: localhost port: 1521 sid: xe service name: xe username: system password: oracle
– Docker para la última version de OpenLdap >>> https://hub.docker.com/r/bitnami/openldap/
Contenemos que te permite ejecutar un OpenLDAP. Es muy sencillo de ejecutar ya que incluye variables de entorno que si las declaras te permiten configurar el LDAP que se ejecuta. Ejemplo de ejecución:
docker run -p 1389:1389 -e LDAP_ROOT="dc=disastercode,dc=com,dc=es" --name openldap bitnami/openldap:latest
– Docker para utilización de Jboss 7.2 >>> https://hub.docker.com/r/daggerok/jboss-eap-7.2
Obtener la IP de un contenedor de Docker
La forma más rápida de saber la ip asignada a un contenedor de docker es utilizar el comando docker inspect. Un ejemplo sería el siguiente:
LDAP con Apache Directory Studio
Una forma rápida de montar un LDAP para tus aplicaciones de desarrollo sería utilizar la herramienta Apache Directory Studio. Esta herramienta aparte de servir como cliente para conectarte a ldaps externos te permite montar uno en local de una forma bastante amigable.
Paso 1/ Creamos el servidor LDAP
Paso 2/ Configuramos el servidor LDAP. Lo vamos a dejar por defecto.
Paso 3/ Probamos a conectarnos a través del propio cliente.
Exportar e Importar claves GPG
Si tienes en tu equipo creadas claves GPG y quieres poder pasarlas a otro equipo. Puedes hacer los siguiente:
A la hora de importar la clave privada te saltará un popup que te pide la frase secreta con la que fue creada inicialmente.
Utilizar GPG para encriptación de ficheros
GNU Privacy Guard (GnuPG ) o GPG permite: cifrar y firmar sus datos/comunicaciones. Utilizando para ello sistema de gestión de claves.
A continuación expongo un ejemplo de como encriptar un fichero y luego desencriptarlo usando para ello GPG.
Paso 1/ Generamos una clave privada y pública.
Paso 2/ Encriptamos un fichero Prueba.txt
Paso 2/ Desencriptamos el fichero Prueba.txt.gpg que se nos había creado anteriormente.
Instalación Apache + Mysql + Php + PhpMyAdmin en ubuntu
Paso 1 – Actualizar la lista de paquetes disponibles y sus versiones ( sudo apt-get update )
Paso 2 – Instalar Apache ( sudo apt-get install apache2 )
Servicio: /etc/init.d/apache2 status
Url: http://127.0.0.1/ ó http://localhost/
Paso 3 – Instalar MySQL ( sudo apt-get install mysql-server )
Te va pedir una contraseña para el usuario root.
Servicio: systemctl status mysql
Paso 4 – Instalar PHP ( sudo apt install -y php )
Prueba:
Crear el fichero /var/www/html/info.php Con el contenido < !--?php phpinfo();?-- > Visitar la url: http://localhost/info.php
Paso 5 – Instalar PhpMyAdmin ( sudo apt-get install phpmyadmin )
Adicionalmente, hay que añadirlo en la configuración de apache2. Para ello:
//Descomentamos el alias en el fichero apache.conf /etc/phpmyadmin/apache.conf Alias /phpmyadmin /usr/share/phpmyadmin //Incluimos la configuración del phpmyadmin en el apache2.conf echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
A partir de la version 5.7 no se puede realizar login en phpMyAdmin con el usuario root. Por lo tanto es necesario crearte un usuario:
sudo mysql -p -u root Enter password: mysql> CREATE USER 'rpf'@'%' IDENTIFIED BY 'rpf'; Query OK, 0 rows affected (0,02 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO 'rpf'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0,02 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0,01 sec)
Error: “Login sin una contraseña está prohibido por la configuración (Ver AllowNoPassword)”
Este error nos lo dará al intentar logarnos si no ponemos una contraseña.
La forma de solucionarlo es:
Descomentar la propiedad AllowNoPassword en el fichero /etc/phpmyadmin/config.inc.php $cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
React tips and tricks
– React Developer Tools: Herramienta para depurar el código. Es un plugin que se instala en el navegador: Chrome, Firefox.
– Simple React Snippets: Plugin para el VSCode que te facilita mucho el desarrollo.
– Fragmentos: Es muy común que un componente devuelva múltiples elementos. La forma más cómoda de hacerlo es con los tag <> </>
class Columns extends React.Component { render() { return ( <> <td>Hello</td> <td>World</td> </> ); } }
– React Bootstrap: Framework de bootstrap adaptado a React. https://react-bootstrap.github.io/
npm install react-bootstrap bootstrap@5.1.3
– Axios: Axios es un cliente HTTP ligero basado en el servicio $http que se puede utilizar con react. Documentación 1 – Documentación 2
npm install axios
Git Actions de GitHub (Parte 5)
Continuamos con algún ejemplo de GitHub Action
workflow.yml: Cuando se crea una rama nueva se modifica en ella la versión del pom.xml, añadiéndole un sufijo extraido del nombre de dicha rama.
name: On create branch - Rename version pom.xml # Esta action se va a ejecutar cada vez que se crea una rama de main on: create: branches: - main jobs: # Tarea que se encargar de sacar el sufijo de la rama extract-suffix-name-branch: runs-on: ubuntu-latest #Lista de variables de salida del job outputs: suffix_name: ${{ steps.get-id.outputs.id }} steps: # Checkout repository - uses: actions/checkout@v2 # Utilizamos action que recupera los nombres de las ramas las ramas - name: Get branch name id: branch-name uses: tj-actions/branch-names@v5.1 # Mostramos por pantalla el nombre de la rama actual: 'prueba-100] description rama' - name: Running on the default branch. if: steps.branch-name.outputs.is_default == 'true' run: | echo "Running on default: ${{ steps.branch-name.outputs.current_branch }}" # Extraemos el sufijo que queremos utilizar para la version del pom: 'prueba-100' - id: get-id run: | id=$(echo ${{ steps.branch-name.outputs.current_branch }} | cut -d] -f1 | cut -d[ -f2) echo "::set-output name=id::$id" # Tarea que se encargar de sacar el prefijo de la versión del pom.xml extract-preffix-name-pom-version: runs-on: ubuntu-latest #Lista de variables de salida del job outputs: preffix_name: ${{ steps.get-id.outputs.id }} steps: # Checkout repository - uses: actions/checkout@v2 #Tarea extrae a la variable version, la version existente en el pom.xml - name: Extract Maven project version working-directory: ./example3-gitactions run: echo ::set-output name=version::$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec) id: project_version - run: echo "Maven project version is ${{ steps.project_version.outputs.version }}" - id: get-id run: | id=$(echo ${{ steps.project_version.outputs.version }} | cut -d- -f1) echo "::set-output name=id::$id" # Tarea que se encargar modificar la versión del pom.xml rename-pom-version-and-commit: # Se le indica que depende de las dos tareas anteriores needs: [extract-preffix-name-pom-version, extract-suffix-name-branch] runs-on: ubuntu-latest steps: # Checkout repository - uses: actions/checkout@v2 # Instalamos jdk 11 - name: Set up JDK 1.11 uses: actions/setup-java@v1 with: java-version: 1.11 # Realiza la modificación de la versión del pom.xml. # Indicando generateBackupPoms a true nos generaría un backup del pom.xml que podríamos utilizar para restaurarlo al mergear la pull-request. - name: set version pom working-directory: ./example3-gitactions run: mvn -B versions:set -DnewVersion=${{ needs.extract-preffix-name-pom-version.outputs.preffix_name }}-${{ needs.extract-suffix-name-branch.outputs.suffix_name }}-SNAPSHOT -DgenerateBackupPoms=false # Realiza una prueba de que sigue compilando perfectamente. - name: mvn package run: mvn -B package --file example3-gitactions/pom.xml # Subimos el cambio al repo. - name: Commit new version pom.xml - branch run: | git config --global user.name 'Roberto' git config --global user.email 'roberto-pf@github.com' git add . git commit -am "Automated report" git push
Nota: Repositorio Github
Documentación action que extrae el nombre de la rama: tj-actions/branch-names
JQ
JQ es una herramienta de consola que nos permite parsear ficheros json. Te permite buscar dentro de un json y mostrar los resultados formateados en lugar de en una sola línea.
Existe una herramienta online donde puedes practicar expresiones: https://jqplay.org/
En el post anterior donde extraiamos de un Json la información necesaria para la Git Action se utilizó con este ejemplo.
Documentación oficial: https://stedolan.github.io/jq/
Herramienta para formateo de json: https://jsonformatter.curiousconcept.com
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places