El proyecto Spring-SSO-Google es una aplicación de demostración que implementa la autenticación de un single-sign-on (SSO) con Google utilizando Spring Boot. Permite a los usuarios autenticarse utilizando sus cuentas de Google a través de OAuth 2.0. La configuración de seguridad está definida en la clase SecurityConfig, que configura el inicio de sesión de OAuth2 para autenticar solicitudes.
La aplicación está configurada para ser desplegada en diferentes ambientes mediante el uso de perfiles de Maven y propiedades de Spring Boot. Esto permite una fácil gestión de la configuración específica del entorno, como id y secret de cliente de OAuth2, que se deben proporcionar en el archivo application.yml correspondiente al entorno.
El punto de entrada principal de la aplicación es la clase SpringSsoGoogleApplication, que define dos endpoints: uno en la raíz que da la bienvenida al usuario autenticado mostrando su nombre, apellido y correo electrónico obtenidos de los atributos del token de autenticación de Google, y otro en /user que devuelve el objeto Principal del usuario autenticado.
El siguiente proyecto ha sido levantado en un entorno local con Apache Maven 3.9.6.
Apache Maven 3.9.6
Java version: 17, vendor: Oracle Corporation
Default locale: es_PY, platform encoding: Cp1252
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
- IDE: IntelliJ IDEA v: 2024.1.1
- Framework: Spring Boot 3.2.5
- Gestor y constructor de proyectos: Maven
A continuación se muestra como desplegar la aplicación en un entorno definido a través de perfiles de configuración. Se definen 4 perfiles que hacen referencia al ambiente local local, desarrollo dev, pre-producción uat y producción prod pudiendo existir otros más dependiendo de la necesidad.
Copiar el archivo denominado application-example.yml que se encuentra en el directorio src/main/resources y renombrarlo como el environment seleccionado a levantar, ejemplo application-local.yml. Modificar los valores de las propiedades por los del ambiente local.
Verificar que en el mismo directorio se encuentre el archivo application.yml cuyo contenido debe ser el siguiente:
spring:
profiles:
active: @activatedProperties@
Definir los clientes OAuth2 en el archivo de configuración de Spring Boot:
- OAuth 2.0
- Cómo usar OAuth 2.0 para acceder a las API de Google
- Guide to using OAuth 2.0 to access Google APIs
spring:
security:
oauth2:
client:
registration:
google:
clientId: TU_CLIENT_ID
clientSecret: TU_CLIENT_SECRET
scope:
- email
- profile
- openidEl archivo pom.xml está preparado para desplegar la aplicación dependiendo de la configuración seleccionada a través del parámetro -P <profile-id>.
# mvn clean package -P <profile-id>
# mvn spring-boot:run -P <profile-id>
# Example:
mvn spring-boot:run -P local
En el log debe mostrar un mensaje de nivel INFO donde se indica el perfil seleccionado para levantar el entorno, similar a:
2024-05-01 15:16:54.305 INFO 1476 --- [main] p.c.s.g.auth.SpringSsoGoogleApplication : The following 1 profile is active: "local"
Nota: Los archivos derivados de
application-example.yml(application-local.yml,application-dev.yml,application-uat.yml,application-prod.yml, otros) no deben estar versionados y no serán reconocidos para ser versionados (.gitignore).
A continuación los pasos para desplegar la aplicación como servicio según recomenienda la documentación de Spring en un entorno seleccionado, para éste ejemplo se utilizará el entorno dev junto con java-11
Verificar versión de Java
$ java -versionInstalar la siguiente versión
$ sudo yum install java-11-openjdk-devel
$ sudo yum install java-11-openjdk
Copiar el archivo denominado application-example.yml que se encuentra en el directorio src/main/resources y renombrarlo como el environment dev de la siguiente manera application-dev.yml. Modificar los valores de las propiedades por los del ambiente de desarrollo.
Para crear un jar 'totalmente ejecutable' con Maven, use la siguiente configuración de complemento entre el tag build > plugins del pom.xml:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>En ese mismo apartado de build se puede modificar el nombre por defecto del paquete generado agregando:
<finalName>[nombre-application]</finalName>Generar el ejecutable en target/
$ mvn clean package -P devCopiar el archivo .jar generado [nombre-application].jar. Se puede levantar la aplicación ejecutando el comando java -jar [nombre-application].jar pero se recomienda levantar como servicio del sistema operativo.
Se asume que la aplicación fue copiada en el directorio [/dir/proyecto]. Para instalar una aplicación Spring Boot como un servicio, se debe crear un enlace simbólico de la siguiente manera:
# modificar [/dir/proyecto]/ por el directorio donde se encuentra el archivo
$ sudo ln -s [/dir/proyecto]/[nombre-application].jar /etc/init.d/[nombre-vinculo]
Se visualiza un archivo de log desde el siguiente enlace var/log/[nombre-vinculo].log
Una vez instalado, se puede iniciar y detener el servicio de la forma habitual. Por ejemplo, en un sistema basado en Debian, podría iniciarlo con el siguiente comando:
$ service [nombre-vinculo] start
# {start|stop|force-stop|restart|force-reload|status|run}
- Downloading Apache Maven
- Instalar OpenJDK11 para CentOS 7.9
- Maven Profile & Spring Boot Properties
- Manual de instalación Spring | 2.1. Supported Operating Systems
- Spring boot change jar name
- OAuth 2.0
- Cómo usar OAuth 2.0 para acceder a las API de Google
- Guide to using OAuth 2.0 to access Google APIs