Skip to content

Aplicación de demostración que implementa la autenticación de un single-sign-on (SSO) con Google utilizando Spring Boot

License

Notifications You must be signed in to change notification settings

mariocodev/spring-sso-google

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Single-sing-on Google utilizando Spring-boot

Badge en Desarollo Maven Spring_boot GitHub Org's stars

Content

Description

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.

Features

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"

Herramientas de desarrollo

Installation

Despliegue local


Maven Profile & Spring Boot Properties

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@
Configuración de proveedor OAuth2 Google

Definir los clientes OAuth2 en el archivo de configuración de Spring Boot:

 spring:
    security:
        oauth2:
            client:
                registration:
                    google:
                        clientId: TU_CLIENT_ID
                        clientSecret: TU_CLIENT_SECRET
                        scope:
                            - email
                            - profile
                            - openid

Maven compile & run

El 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).

Despliegue como servicio


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

Instalar OpenJDK11

Verificar versión de Java

$ java -version

Instalar la siguiente versión

$ sudo yum install java-11-openjdk-devel
$ sudo yum install java-11-openjdk

Maven Profile & Spring Boot Properties & compile & run

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.

Generar .jar

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 dev

Copiar 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.

Levantar el ejecutable como servicio

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}

FAQ

About

Aplicación de demostración que implementa la autenticación de un single-sign-on (SSO) con Google utilizando Spring Boot

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages