---
title: "Seguridad integrada en aplicaciones Web Spring Boot"
canonical: "https://onesaitplatform-es.refined.site/space/DOC/2216828076/Seguridad%20integrada%20en%20aplicaciones%20Web%20Spring%20Boot"
format: markdown
---
ES | [EN](https://onesaitplatform.atlassian.net/wiki/spaces/DOCT/pages/2220849259)

Para facilitar la integración de las aplicaciones Spring Boot web desarrolladas sobre la OpenPlatform, con la autenticación y los Realms de plataforma se proporciona la librería **onesaitplatform-web-security-client**  cuya dependencia es:


```php
<dependency>
  	<groupId>com.minsait.onesait.platform</groupId>
  	<artifactId>onesaitplatform-web-security-client</artifactId>
	<version>1.3.0-RELEASE</version>
</dependency>
```



Y está disponible para descargar desde el nexus de plataforma: [**http://nexus.onesaitplatform.com/nexus/content/repositories/releases/**](http://nexus.onesaitplatform.com/nexus/content/repositories/releases/)

** **

** **

Esta librería permite autenticar a las aplicaciones con el Realm que tengan definido en Plataforma y securizar los servicios REST utilizando authorities y roles definidos en el REALM.



Lo ilustraremos con un ejemplo:


Creamos el Realm **TEST_SSO** con los authorities** auth1, auth2, auth3** y los Roles **ROLE_USER, ROLE_ADMINISTRATOR.** Recordar que authorities y roles son conceptos muy parecidos, pero los authorities proporcionan un grano más fino en la gestión de permisos, mientras que los Roles agrupan distintos permisos. Es tarea de la aplicación diferenciar entre ellos y gestionarlos. A nivel de servidor OAUTH se diferencian por el prefijo **ROLE_** que tienen los Roles:

![image](media://c76025c6-f4a2-4ab4-8698-04a5795d168f)


Una vez definidos los authorities y Roles, los asignamos a los usuarios. En este caso asignamos al usuario jfgpimpollo el** ROL_USER **y el authority **auth1**:

![image](media://7724a5c9-fe76-499e-8b47-0e7b8e7402c0)


Con esto ya tenemos en el servidor OAUTH2 de plataforma la gestión de roles y su asignación a usuarios mediante el REALM de la aplicación. A continuación lo usamos desde nuestra aplicación:

Para ello, en el **pom.xml** de nuestra aplicación Spring boot añadimos la dependencia de la librería de seguridad web de plataforma:


```css
<dependency>
	<groupId>com.minsait.onesait.platform</groupId>
    <artifactId>onesaitplatform-web-security-client</artifactId>
	<version>1.3.0-RELEASE</version>
</dependency>
```


Y añadimos el repositorio nexus desde el que descargarla:

```css
<repositories>
	<repository>
        <id>onesait</id>
    	<url>https://nexus.onesaitplatform.com/nexus/content/repositories/releases/</url>
	</repository>
</repositories>
```



A continuación, si todavía no hemos habilitado **Spring security** en el **pom.xml** de nuestra aplicación, añadimos la dependencia:

```css
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
```



Lo siguiente es añadir al **application.properties** o **application.yml** las propiedades que necesita la librería de seguridad, que básicamente son los parámetros de configuración para conectarse al servidor OAUTH2 que gestiona el Realm de la aplicación. En concreto se trata de las siguientes propiedades (en formato .yml):

```plaintext
openplatform.api:
   baseurl: https://development.onesaitplatform.com
   auth:
    login.path: /oauth-server/oauth/token
    token:
      verify.path: /oauth-server/openplatform-oauth/check_token
      grant_type: password
      scope: openid
      clientId: TEST_SSO
      password: onesaitplatform
```



donde tendremos que ajustar las propiedades:

- **baseurl**: Es la url de la instancia de OpenPlatform utilizada por la aplicación.
- **clientId**: Identificador del Realm de la aplicación.



Hay que tener en cuenta que una vez habilitado Spring Security en nuestra aplicación Spring Boot, ésta ha sido securizada por la autoconfiguración que hace Spring Boot, por lo que tendremos que decidir que urls escapamos (al menos la de login), **además indicando que estamos securizando recursos mediante OAUTH2** (Extendemos de **ResourceServerConfigurerAdapter** en vez de WebSecurityConfigurerAdapter). Añadiremos algo de este estilo a nuestra aplicación:


![image](media://bc84c9fe-2051-4215-9aa1-00365a71487d)

**ATENCIÓN:** en versiones recientes, debes eliminar*** .anyRequest().authenticated() ***para realizar la prueba.

A continuación hay que programar la autenticación contra plataforma con el usuario/password de los usuarios añadidos al REALM de la aplicación. Para esto, la librería **onesaitplatform-web-security-client** proporciona un Bean de Spring que permite hacer login contra el servidor OAUTH2. Este Bean se puede inyectar añadiendo nuestro componente:


```java
@Autowired
private LoginService loginService;
```

    


y se utiliza del siguiente modo para recuperar el Token OAUTH2 devuelto por plataforma:


```java
String token=loginService.login(user, password).getToken();
```


Por ejemplo, para ilustrarlo crearemos un servicio REST para autenticar y recuperar el token:


![image](media://23a19a5c-1c8d-43be-bf72-4c550c88eb5a)


Lo podemos invocar de forma sencilla desde el navegador recuperando de este modo el Token:

![image](media://bf06352a-07d8-4df8-8c9e-33006770cf37)





A continuación podemos utilizar ese token enviándolo como cabecera Authorization a todas las peticiones REST y podemos securizar los métodos con anotaciones Spring:


Por ejemplo veremos unos cuantos métodos securizados:

![image](media://7d81fbc8-6971-439f-a247-2082cb4100ea)

Con respuesta:

![image](media://d0442b63-1909-4455-95e0-c541f8d0b7a8)



![image](media://3671d0d8-0101-4f01-86dc-5347ef2e3d7a)


Con respuesta

![image](media://75d5dfe3-6718-4aba-ada6-2ace016d1e35)



![image](media://50f40aaf-9b67-4571-92d6-c8ec24b275bf)

Con respuesta:


![image](media://afe92f34-1db7-43f1-a6ce-4668d8ed16f4)



![image](media://1e1c09cf-8477-4cb1-80ee-08b9ad022119)




Con respuesta:

![image](media://37d05de7-4b87-4992-af7e-34e92c5ed1b1)