38
Bloque 3: Parte servidora (backend) DISEÑO DE APLICACIONES WEB Jesús Montes jmontes@fi.upm.es TEMA 3.4: SEGURIDAD CON SPRING SECURITY

DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Bloque 3: Parte servidora (backend)

DISEÑODEAPLICACIONESWEB

Jesú[email protected]

TEMA3.4:SEGURIDADCONSPRINGSECURITY

Page 2: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Disclaimer

• Estematerialestábasadoenunmaterialoriginalde:§  BoniGarcía([email protected])

SEGURIDADCONSPRINGSECURITY

2

Page 3: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Índice de contenidos

1.  Seguridadenredesdedatos2.  Autenticaciónyautorización3.  Confidencialidad

SEGURIDADCONSPRINGSECURITY

3

Page 4: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Índice de contenidos

1.  Seguridadenredesdedatos§  Serviciosdeseguridad

§  TLS

§  HTTPS2.  Autenticaciónyautorización3.  Confidencialidad

SEGURIDADCONSPRINGSECURITY

4

Page 5: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Serviciosdeseguridad•  Unserviciodeseguridadprotegelascomunicacionesdelosusuariosantedeterminadosataques.Losprincipalesson:§  Confidencialidad:Proporcionaprotecciónparaevitarquelosdatosseanreveladosaunusuarionoautorizado.

§  Autenticaciónyautorización:Sirveparagarantizarqueunaentidad(personaomáquina)esquiendiceser,ydeterminaraquérecursostieneacceso.

§  Integridad:Garantizaalreceptordelmensajequelosdatosrecibidoscoincidenexactamenteconlosenviadosporelemisor.

§  Norepudio:Impidequeunemisor/receptornieguehaberestadoinvolucradoenunacomunicación.

SEGURIDADCONSPRINGSECURITY

5

Page 6: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Seguridadenredesdedatos•  Laconfidencialidadseconsiguetípicamenteusandotécnicascriptográficas(cifradodemensajes).Tiposdesistemascriptográficos:§  Criptosistemasdeclavesecreta.Enellos,laclavede

cifradoydedescifradoeslamisma:esunaclavesecretaquecompartenelemisoryelreceptordelmensaje.Debidoaestacaracterísticasondenominadostambiéncriptosistemassimétricos

§  Criptosistemasdeclavepública.Sedistinguenporquecadausuarioosistemafinaldisponededosclaves:unaprivada,quedebemantenersecreta,yunapública,quedebeserconocidaportodaslasrestantesentidadesquevanacomunicarconella.Selosconocetambiéncomocriptosistemasasimétricos

SEGURIDADCONSPRINGSECURITY

6

Page 7: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Seguridadenredesdedatos•  Elcifradoasimétricoesmenosvulnerablequeelsimétrico,peroescomputacionalmentemuchomascostoso.

•  Elmodelohíbridoesunmecanismopararealizarcomunicacionessegurasquecombinacifradoasimétricoysimétrico.§  Usandocifradoasimétrico,serealizaunintercambiodeclavespúblicas.

§  Usandolasclavespúblicasseintercambiaunaclavedesesión,simétrica,queseusaparaelrestodecomunicaciones.

7

SEGURIDADCONSPRINGSECURITY

Page 8: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

8

SEGURIDADCONSPRINGSECURITY

Clave pública del receptor

Clave de sesión

Page 9: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Seguridadenredesdedatos•  Laautenticaciónyautorizaciónseconsiguenmediante:

§  Algoquesabes.Porejemplo,unascredencialeslogin-password.

§  Algoquetienes.Porejemplo,unatarjetadeacceso.

§  Algoqueeres.Porejemplo,cualidadesbiométricas(huelladigital…).

•  LaintegridadseconsiguetípicamenteconfuncionesHash(resumen)

§  Sonfuncionescomputablesmedianteunalgoritmoqueconvierteunaentradabinaria(típicamenteunficheroounmensajedigital)aunrangodesalidafinito(típicamenteunacadenasalfanumérica)

•  Elnorepudioseconsiguemedianteregistrosprotegidosdelaactividaddelosusuarios,siempreycuandosegaranticesuautenticaciónylaintegridaddelproceso.

SEGURIDADCONSPRINGSECURITY

9

Page 10: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Serviciosdeseguridad•  Firmadigital:

§  Unafunciónhashsepuedeusarparacalcularun“resumen”deunmensaje(checksum).

§  Paraprotegerelresumen,secifrautilizandounaclaveprivada.

SEGURIDADCONSPRINGSECURITY

10

Page 11: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Serviciosdeseguridad•  Enloscriptosistemasdeclavepública,uncertificadodigitalesundocumentoelectrónicoqueasociaelnombredeunaentidadconsuclavepúblicaduranteundeterminadoperiododevalidez.

•  ElcertificadodigitalesemitidoporunaAutoridaddeCertificación(CA),osea,la“TerceraPartedeConfianza”(TTP,TrustedThirdParty)

•  Loscertificadosusadosenaplicacioneswebasocianundominiowebasuclavepública.

•  Tipodecertificadomásutilizado:X.509(estándardelITU-T).

SEGURIDADCONSPRINGSECURITY

11

Page 12: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos SEGURIDADCONSPRINGSECURITY

12

Page 13: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

Serviciosdeseguridad•  Ejemplosdealgoritmos:

SEGURIDADCONSPRINGSECURITY

13

Criptosistemas asimétricos § RSA (Rivest, Shamir y Adleman) § Diffie-Hellman §  ElGamal §  Criptografía de curva elíptica

Criptosistemas simétricos §  AES (Advanced Encryption Standard) §  ES (Data Encryption Standard) §  IDEA (International Data Encryption

Algorithm) §  3DES §  RC2, RC4, RC5 §  Blowfish Funciones hash

§  SHA (Secure Hash Algorithm) §  MD5 (Message-Digest Algorithm 5) §  DSA (Digital Signature Algorithm)

Page 14: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

TLS•  TLS(TransportLayerSecurity)esunprotocolocriptográficodenivelde

transportequesigueunmodelodecifradohíbrido(asimétrico+simétrico)yqueproporcionacomunicacionessegurassobreTCP.§  EslaversiónevolucionadadeSSL(SecureSocketsLayer).

§  Enoctubrede2014sedescubrióunavulnerabilidadcríticaenSSL3.0quehacequesuusoestédesaconsejado.

•  LosserviciosdeseguridadofrecidosporSSL/TLSson:§  Confidencialidad:secifraelintercambiodedatosanivelTCP.

§  Autenticación:entidadespuedenconfirmarsuidentidad.Enunprotocolocliente-servidorsóloelservidoresautenticado(esdecir,segarantizasuidentidad)mientrasqueelclientesemantienesinautenticar

§  Integridad:seusaunafunciónhashparagarantizarlaintegridaddedatos

SEGURIDADCONSPRINGSECURITY

14

Page 15: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

TLS•  Paraestableceruncanalsegurocifrado,lasentidadestienenquellegaraun

acuerdo(handshake)

•  Elhandshaketienevariasfases:1.  Establecimientodecaracterísticasseguridad(algoritmocifrado,etc).

2.  Elservidorenvíasucertificadodigital.

3.  Elclienteestablecelaclavemaestra(MS,MasterSecret)�  Opcionalmenteelclientepuedemandarsucertificadoenestafase.�  Enaplicacionesweb(HTTPS),elservidoreselúnicoautenticado,esdecir,sóloel

servidorenvíauncertificadoalcliente.

4.  Finalizacióndelhandshakeeiniciodecomunicaciónsegura.

•  Despuésdelhandshakeelintercambiodetráficoseproducemediantecifradodeltráficobasadoencifradosimétrico.

SEGURIDADCONSPRINGSECURITY

15

Page 16: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

TLS•  Handshake:

SEGURIDADCONSPRINGSECURITY

16

ServerHello

Certificate

ServerHelloDone

Finished

ChangeCipherSpec

ClientHello

ChangeCipherSpec

Finished

cliente servidor

Fase 1. Inicio

Fase 2. El servidor manda el certificado

Fase 4. Finalización

Intercambio de datos en canal seguro mediante cifrado simétrico

ClientKeyExchange Fase 3. Establecimiento de clave maestra (MS, Master Secret)

Page 17: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

TLS•  Handshake:

SEGURIDADCONSPRINGSECURITY

17

ServerHello

Certificate

ServerHelloDone

Finished

ChangeCipherSpec

ClientHello

ChangeCipherSpec

Finished

cliente servidor

ClientKeyExchange

El cliente genera una clave maestra MS que será usada para cifrar todos los datos de la sesión segura. Esta clave se envía cifrada con la clave pública del servidor, obtenida a partir del certificado

El servidor obtiene la clave maestra MS descifrando el mensaje enviado por el cliente, usando para ello su clave privada

Al enviar el certificado el servidor está mandando su clave pública al cliente

Page 18: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

HTTPS•  HypertextTransferProtocolSecure.VersiónseguradeHTTP.•  HTTPSnoesmásqueHTTPsobreTLS/SSL.

•  ConHTTPSseconsiguequelainformaciónsensible(claves,etc)nopuedaserinterceptadaporunatacante,yaqueloúnicoqueobtendráseráunflujodedatoscifradosqueleresultaráimposiblededescifrar.

•  PuertoTCPpordefectoenservidoresHTTPS:443

SEGURIDADCONSPRINGSECURITY

18

HTTPS TLS

TCP

IP

Page 19: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

1. Seguridad en redes de datos

HTTPS•  LosnavegadorestienenunalistadeCAsconocidas.•  Alrecibiruncertificadonovalidomuestraunaalertadeseguridadalusuario.Estoocurrecuando:§  ElcertificadofirmadoporunaCAnoconocida(porejemplo,un

certificadoautofirmado).

§  Elcertificadohacaducado.

SEGURIDADCONSPRINGSECURITY

19

Page 20: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Índice de contenidos

1.  Seguridadenredesdedatos2.  Autenticaciónyautorización

§  EjemploAAsencillo

§  EjemploAAmedio

§  EjemploAAavanzado3.  Confidencialidad

SEGURIDADCONSPRINGSECURITY

20

Page 21: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

•  VamosavercomoimplementarlosserviciosdeseguridaddeautenticaciónyautorizaciónenSpring(Boot+Security)estudiandotresejemplos:

1.  Sencillo(proyectospring-security-aa-simple)�  Usuariosenmemoria,rolúnico.

2.  Medio(proyectospring-security-aa-medium)�  Usuariosenmemoria,variosroles.

3.  Avanzado(proyectospring-security-aa-advanced)�  Usuariosenbasededatos,variosroles.

SEGURIDADCONSPRINGSECURITY

21

Page 22: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

SEGURIDADCONSPRINGSECURITY

22

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies>

Page 23: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

SEGURIDADCONSPRINGSECURITY

23

@Controller public class SecurityController { @RequestMapping("/") public ModelAndView index() { return new ModelAndView("index"); } @RequestMapping("/login") public ModelAndView login() { return new ModelAndView("login"); } @RequestMapping("/home") public ModelAndView home() { return new ModelAndView("home"); } }

Controlador muy sencillo: sólo asocia URLs con vistas

Page 24: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

SEGURIDADCONSPRINGSECURITY

24

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <body> Access to protected pages clicking <a th:href="@{/home}">here</a>! </body> </html>

Index.html

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form th:action="@{/logout}" method="post"> <input type="submit" value="Sign Out”/> </form> </body> </html>

home.html

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Login form</title> </head> <body> <p th:if="${param.error}">Invalid credentials</p> <p th:if="${param.logout}">Logged out</p> <form th:action="@{/login}" method="post”> <label>User Name:</label> <input type="text" name="username” /> <br /> <label>Password:</label> <input type="password" name="password” /> <br /> <input type="submit" value="Sign In" /> <br /> </form> </body> </html>

login.html

Page 25: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

SEGURIDADCONSPRINGSECURITY

25

@Configuration @EnableGlobalMethodSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/").permitAll(); http.authorizeRequests().anyRequest().authenticated(); http.formLogin().loginPage("/login").usernameParameter("username") .passwordParameter("password").defaultSuccessUrl("/home") .failureUrl("/login?error").permitAll(); http.logout().logoutUrl("/logout").logoutSuccessUrl("/login?logout") .permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("user").password("p1") .roles("USER"); } }

El path “/” tendrá acceso permitido. El resto necesitará autenticación

Autenticación basada en formulario

Página para la desconexión

Un único usuario (en memoría)

Page 26: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

SEGURIDADCONSPRINGSECURITY

26

/home es un recurso protegido, así que se redirige la navegación al formulario de login

Con las credenciales correctas vamos a /home

logout

Page 27: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAsencillo:proyectospring-security-aa-simple

•  Todaslasvistasincorporanunamedidadeseguridadautomática:untokenautomáticoCSRF(CrossSiteRequestForgery).

•  Estetokenlogeneraelservidorparacadapeticiónyesrequeridoparapoderrecibirdatosdelcliente.

SEGURIDADCONSPRINGSECURITY

27

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form th:action="@{/logout}" method="post"> <input type="submit" value="Sign Out" /> </form> </body> </html>

<!DOCTYPE html> <html> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form method="post" action="/logout"> <input type="submit" value="Sign Out" /> <input type="hidden" name="_csrf" value="c54a70a7-1586-4dc3-8e64-4fac09625ce2" /></form> </body> </html>

Page 28: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAmedio:proyectospring-security-aa-medium

SEGURIDADCONSPRINGSECURITY

28

Proyecto con la misma estructura salvo que tiene una vista más

Page 29: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAmedio:proyectospring-security-aa-medium

SEGURIDADCONSPRINGSECURITY

29

@Configuration @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { // Same authentication schema than example before @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // Authorization auth.inMemoryAuthentication().withUser("user").password("p1") .roles("USER"); auth.inMemoryAuthentication().withUser("root").password("p2") .roles("USER", "ADMIN"); } }

Cambiamos la anotación que define el método de seguridad para poder restringir la autorización de los métodos controladores a ciertos roles de usuario

Dos usuarios en memoria de diferente tipo (rol)

Page 30: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAmedio:proyectospring-security-aa-medium

SEGURIDADCONSPRINGSECURITY

30

@Controller public class SecurityController { @RequestMapping("/") public ModelAndView index() { return new ModelAndView("index"); } @RequestMapping("/login") public ModelAndView login() { return new ModelAndView("login"); }

@Secured({ "ROLE_USER", "ROLE_ADMIN" }) @RequestMapping("/home") public ModelAndView home() { Authentication auth = SecurityContextHolder .getContext().getAuthentication(); String name = auth.getName(); ModelAndView model = new ModelAndView("home") .addObject("name", name); return model; } @Secured("ROLE_ADMIN") @RequestMapping("/root") public ModelAndView root() { return new ModelAndView("root"); } }

Los métodos protegidos se anotan con @Secured y el nombre del rol (con prefijo ROLE_)

Page 31: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAavanzado:proyectospring-security-aa-advanced

SEGURIDADCONSPRINGSECURITY

31

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>

Page 32: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAavanzado:proyectospring-security-aa-advanced

SEGURIDADCONSPRINGSECURITY

32

@Component public class DatabaseLoader { @Autowired private UserRepository userRepository; @PostConstruct private void initDatabase() { // User #1: "user", with password "p1" and role "USER" GrantedAuthority[] userRoles = { new SimpleGrantedAuthority("ROLE_USER") }; userRepository.save(new User("user", "p1", Arrays.asList(userRoles))); // User #2: "root", with password "p2" and roles "USER" and "ADMIN" GrantedAuthority[] adminRoles = { new SimpleGrantedAuthority("ROLE_USER"), new SimpleGrantedAuthority("ROLE_ADMIN") }; userRepository.save(new User("root", "p2", Arrays.asList(adminRoles))); } }

Componente usado para popular la base de datos (se ejecutará al iniciar la aplicación)

Page 33: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAavanzado:proyectospring-security-aa-advanced

SEGURIDADCONSPRINGSECURITY

33

@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String user; private String password; @ElementCollection(fetch = FetchType.EAGER) private List<GrantedAuthority> roles; public User() { } public User(String user, String password, List<GrantedAuthority> roles) { this.user = user; this.password = new BCryptPasswordEncoder().encode(password); this.roles = roles; } // getters, setters }

Entidad persistente que almacenará las credenciales de usuario y sus roles

Las contraseñas nunca se deben almacenar en claro (hay que usar cifrado o función hash)

Page 34: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAavanzado:proyectospring-security-aa-advanced

SEGURIDADCONSPRINGSECURITY

34

@Configuration @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Autowired public CustomAuthenticationProvider authenticationProvider; // Same authentication schema than examples before @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // Database authentication provider auth.authenticationProvider(authenticationProvider); } }

El gestor de autenticación ya no son credenciales en memoria

public interface UserRepository extends CrudRepository<User, Long> { User findByUser(String user); }

Repositorio de usuarios

Page 35: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

2. Autenticación y autorización

EjemploAAavanzado:proyectospring-security-aa-advanced

SEGURIDADCONSPRINGSECURITY

35

@Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Autowired private UserRepository userRepository; @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName(); String password = (String) authentication.getCredentials(); User user = userRepository.findByUser(username); if (user == null) { throw new BadCredentialsException("User not found"); } if (!new BCryptPasswordEncoder().matches(password, user.getPasswordHash())) { throw new BadCredentialsException("Wrong password"); } List<GrantedAuthority> roles = user.getRoles(); return new UsernamePasswordAuthenticationToken(username, password, roles); } }

Se inyecta repositorio de usuario

Lectura de credenciales del formulario

Se comprueba usuario y contraseña

Lectura de lista de roles

Page 36: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

Índice de contenidos

1.  Seguridadenredesdedatos2.  Autenticaciónyautorización3.  Confidencialidad

SEGURIDADCONSPRINGSECURITY

36

Page 37: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

3. Confidencialidad

Ejemplo:proyectospring-security-https

SEGURIDADCONSPRINGSECURITY

37

•  Exactamenteigualqueproyectospring-security-aa-simpleexcepto:

§  application.properties:

§  keystore.jks:RepositoriodecertificadosJava

server.port=8443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=password server.ssl.key-password=secret

Page 38: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes

3. Confidencialidad

Ejemplo:proyectospring-security-https

•  keystore.jkssecreaconherramientakeytool(incorporadaenJRE)

SEGURIDADCONSPRINGSECURITY

38

$ $JAVA_HOME/bin/keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 365 -keysize 2048 ¿Cuáles son su nombre y su apellido? [Unknown]: Jesus Montes ¿Cuál es el nombre de su unidad de organización? [Unknown]: Programacion Web ¿Cuál es el nombre de su organización? [Unknown]: UPM ¿Cuál es el nombre de su ciudad o localidad? [Unknown]: Madrid ¿Cuál es el nombre de su estado o provincia? [Unknown]: Madrid ¿Cuál es el código de país de dos letras de la unidad? [Unknown]: ES ¿Es correcto CN=Jesus Montes, OU=Programacion Web, O=UPM, L=Madrid, ST=Madrid, C=ES? [no]: si Introduzca la contraseña de clave para <selfsigned> (INTRO si es la misma contraseña que la del almacén de claves): secret Volver a escribir la contraseña nueva: secret