You are on page 1of 8

F?:@'".$&2&%G&1'210*%A'*5% H&$02'$$%!"5&10"2$%!

,IJ
!"#"$%$&%'#()'$*%+'%!"#"$%&'(')&*($$"++"',-."$/0%12", -$'%*("."%/&'%$0'#()'%/&0$"%1'2'),,,

!"#$%&'(&#()'*+%,,'-.((/(0&%1%2%3(4#*+(53%$+(/(61%2%$'(7.4 7889:(;'$(<#=$'$&3(&#(>#$'=#*(?@'&=%&A +#,BC1'DE(F9G(H.(IJK(99(:I %$13L'M+#$+%'B23N(/!!"""#$%&'(&)$#*+,

34')&*($$"++"'5&'2"/#"-&-%&*'6' #$"6&2%"*'('/&515( ]4'8:51%"$>('5&'2H51="'6'$&2"/&-5(21"-&*'5&'/&L"$( 74'8$$(-9:&'5&'#$"6&2%"*';(*(5"*'&-'-:&<(*' %&2-"+"=>(*


1. Definicin de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditora preventiva peridica de calidad. 5. Revisin previa a la certificacin de proyectos. 6. Extensin de capacidad de equipos de calidad. 7. Identificacin de problemas en produccin.
E*

9)*2%-#()'$*
3'42"5"67* 8'$*))"55" !0$1'#*$

AB:

<"24&)$" <"2$&51")*%C <"2$&51")*%D <"2$&51")*%E -/&0("%()"(0"%+'$*))"55"

?')0=04*40;2% ()'@0*

:)"+&440;2
<')10=04*40;2 "%:)&'>*$

:05"1"

E>

*&1'210*

^4'Q:$*"*'5&'."$/(21H-'K0#(*)10+"$%(")%+'$*))"55*+")'$%'2%*410@"L
!#$1-='KTQU'M!VWJ$1/&V(2&*'XN12EV(2&*U' YFKCZU'Q!!7U'M(<(!2$1#%WL?:&$6 Q"-%$"+'5&'(:%&-%12(21H-'6' (22&*"'B!#$1-='!&2:$1%6D R)), S&;'!&$<12&* N&*%'!&$<12&* !"21(+'!!P !!P'BQ(*D MJ8WY1;&$-(%&U'K6I(%1* K"%"$'5&';[*9:&5('&/#$&*($1(+'B!"+$D OFC'BF(+&-5D )1$&221H-'5&'J$"6&2%"*',-."$/0%12"*4 K&%"5"+"=>(*'0=1+&* J(%$"-&*'5&'51*&\" F))

A&*%"$'#"$%(+&*'BC1.&$(6D A&*%"$'5&'2"-%&-15"*'B8+.$&*2"D 8#+12(21"-&*'E>;$15(* F($&(*'#$"=$(/(5(*'B?:($%GD A&*%"$'5"2:/&-%(+'B8+.$&*2"D ,-<&$*1H-'5&'2"-%$"+'B!#$1-=D

IJK'BLIJK'"'I"-1%(D A&-&$(21H-'5&'1-."$/&*'BM(*#&$N&#"$%D O!I'BP#&-'O!ID

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Para ms informacin vistenos en: www.autentia.com

Entra en Adictos a travs de


E-mail Contrasea

Entrar

Deseo registrarme Olvid mi contrasea

David Gmez Garca Titulado en Ingeniera Tcnica en Informtica por la Universidad Politcnica de Madrid en 1998, David ha participado en proyectos para telecomunicaciones, comercio electrnico, banca, defensa y sistemas de transporte terrestre. Ha liderado proyectos de aplicaciones web, infraestructura SOA, aplicaciones java cliente y pasarelas de comunicacin entre sistemas.
Seguir a @dgomezg 453 seguidores

Catlogo de servicios Autentia

Twitter:

Ver todos los tutoriales del autor

Fecha de publicacin del tutorial: 2013-07-08

Integrar el login de Google en tu App con OAuth2 y Spring Security


En este tutorial, vamos a ver cmo montar en tres sencillos pasos la seguridad de nuestra aplicacin con Spring Security, pero delegando la autenticacin en un proveedor externo de OAuth2 como Google (o tambin podra ser Facebook, twitter, Linkedin u otros). Qu significa esto?, bsicamente que delegaremos el control de usuario y password (la autenticacin) en un sistema ajeno, de forma que no tenemos que preocuparnos de la gestin de usuarios (darlo de alta, gestionar sus contraseas, sus recordatorios, etc..) ya que ese mantenimiento ya lo lleva a cabo el proveedor de OAuth contra el que conectamos. En nuestra aplicacin, por tanto, slo nos preocuparemos de delimitar las restricciones de seguridad (la autorizacin); esto es, a quin o a qu tipo de usuarios dejamos acceder a qu partes. Empezaremos por crear una aplicacin web que tendr una parte pblica (accesible a cualquier usuario) y una parte privada (slo para usuarios registrados). Configuraremos Spring Security para especificar las restricciones de seguridad de la parte privada. Por ltimo configuraremos el sistema de autenticacin de Spring Security, utilizando una librera con implementacin de proveedores especficos de SpringSecurity para OAuth, para integrar el proceso de identificacin del usuario (autenticacin). Iremos viendo estos pasos en los siguientes apartados: Estructura bsica de la aplicacin Obtener las API Keys para poder utilizar el Login de Google. Configurando Spring Security en nuestra aplicacin. Configuracin de Google como proveedor OAuth de autenticacin La prueba de la aplicacin Una vez que tengamos configurada la autenticacin utilizando un proveedor de OAuth, evolucionaremos nuestro sistema, incluyendo soporte a varios proveedores. Comentando el libro: Agile Management de Angel Medinilla Final de temporada de Terrakas Autentia freaklances Atencin, APLAZADO Estreno ltimo captulo de Terrakas Vendedor: Soy inseguro, filtra o elige por mi: si quieres que te compre. Comentando el libro: El arte de pensar, de Rolf Dobelli Histrico de noticias

Sguenos a travs de:


ltimas Noticias

Estructura bsica de la aplicacin.


Nuestra aplicacin de ejemplo constar de una "Landing Page", que consideraremos pblica y a la que podr acceder cualquier usuario. En la landing page, daremos la opcin de que el usuario acceda a la parte privada, donde se mostrar su nombre y sus credenciales asignadas dentro de la aplicacin. Esta pgina con la descripcin del perfil ser la parte que consideraremos privada y, por tanto, slo de acceso para usuarios registrados.

ltimos Tutoriales
Hola Mundo con Spring 3 MVC Ejecucin de tests unitarios con junit en proyectos ant y su integracin en jenkins y sonar para medir la cobertura. Comentando la AOS 2013 El esquema general del proceso de login con OAuth Vamos a utilizar Spring MVC para la aplicacin web. As que comenzamos por definir en el Web.xml el DispatcherServlet de Spring: 1 2 3 4 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
?

Soporte en Sonar para un proyecto multi-lenguaje: configuracin desde Jenkins Integracin de Selenium Grid con Jenkins

5 6 7 8 9 10 11 12 13 14 15 16 17

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>springWeb</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springWeb</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>

ltimos Tutoriales del Autor


El Mediterrnea APIDays que vivimos

Una vez configurado el DispatcherServlet de Spring, configuramos los componentes de infraestructura de Spring MVC en el fichero {servlet-name}-servlet.xml. En este caso, el fichero se llamar springWeb-servlet.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
? <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <mvc:annotation-driven/> <!-- Rutas por defecto para los archivos estaticos --> <mvc:resources mapping="/js/**" location="/js/"/> <mvc:resources mapping="/img/*" location="/img/"/> <mvc:resources mapping="**.html" location="/"/> <mvc:resources mapping="/css/**" location="/css/"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

Con la estructura de Spring y de la aplicacin web creadas, utilizaremos como pgina pblica una versin ligeramente modificada de uno de los ejemplos de Twitter Bootstrap, en la que incluimos un botn con un enlace a la pgina privada: 1 <a class="btn btn-large btn-primary right" href="/userHome">Entra</a>
?

Ahora definiremos un controlador de Spring MVC que simplemente pondr informacin del perfil del usuario disponible en la vista: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
? package com.dgomezg.playground.spring.oauth.controller; import org.springframework.security.access.annotation.Secured; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HomeController { @RequestMapping(value="/userHome", method = RequestMethod.GET) public void getUserProfile(Model model) { model.addAttribute("user", SecurityContextHolder.getContext().getAuthentication().getPrincipal()); } }

Por ltimo, para acabar la estructura bsica de la aplicacin, preparamos la pgina privada donde mostraremos informacin del usuario registrado (en este caso ser solo el perfil del usuario, para mantener el ejemplo sencillo). Esta pgina la crearemos en /WEB-INF/jsp/userHome.jsp 1 2 3 4 5 6 7 8 <html> <body> <div>Usuario Registrado: <%=user%></div> </body> </html>
?

Con esta estructura, tendremos ya la aplicacin base sobre la que aadir la seguridad con el proceso de Login delegado en proveedores externos. Es normal que, en este punto, la aplicacin d un error al pulsar en el botn de "Entrar" de la parte pblica. Eso se debe a que no hemos configurado todava los procesos de seguridad. Vamos ahora a ello. Vamos a empezar con integrar la validacin de usuario con Google.

Obtener las API Keys para poder utilizar el Login de Google.


Para invocar el servicio de Login de Google, necesitamos obtener un cdigo de uso (un API Key) para nuestra aplicacin. Para ello, accederemos a la consola de APIs de Google. Si no lo hemos hecho antes, el primer paso que necesitamos es crear un proyecto

Consola en Google APIs para dar de alta nuestro proyecto Pulsamos en el botn "Create project..." y en la siguiente pantalla podemos seleccionar los servicios que vamos a querer utilizar de Google. En este caso, como slo vamos a utilizar el Login, no es necesario seleccionar ningn servicio adicional; pasamos a obtener el API Key. Para ello, seleccionamos en el men de la izquierda, la opcin API Access:

Creacin de un cliente para el acceso al API de OAuth de Google Pulsamos en el botn "Create an OAUTH 2.0 client ID..." e introducimos los datos de nuestra aplicacin

Detalles del cliente para el acceso al API de OAuth de Google

En el siguiente apartado, especificamos el tipo de aplicacin, en nuestro caso, una aplicacin web, e indicamos, para nuestro tutorial, que la URL es http://localhost

Tipo del cliente para el acceso al API de OAuth de Google Pulsamos en el botn "Create client ID" y nos llevar al panel de control donde podremos ver el API Key generado que tendremos que configurar ms adelante en nuestra aplicacin. En concreto, necesitaremos los valores del "Client ID" y el "Client Secret".

Datos a usar en el cliente para el acceso al API de OAuth de Google Desde esta consola de administracin podremos crear nuevos clientes de autorizacin ("Create another client ID...") o modificar, por ejemplo la URL a la que Google deber devolver la llamada despus de haber realizado la autenticacin ("Edit settings..."). Volveremos sobre esto un poco ms tarde.

Configurando Spring Security en nuestra aplicacin.


Spring Security es un mdulo del framework de Spring que nos permite configurar de forma muy sencilla la gestin de seguridad en nuestras aplicaciones web. Se basa en un Filtro, o ms bien en una cadena de filtros (SpringSecurityFilterChain), que se encargar de coordinar las distintas tareas que participan en el control de la seguridad de una aplicacin Web. Para aadir seguridad con Spring Security en nuestra aplicacin web, comenzaremos por configurar dicho filtro de seguridad en nuestro descriptor web.xml: 1 2 3 4 5 6 7 8 <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
?

Con esta configuracin, se crea un servletFilter (DelegatingFilterProxy) que buscar en el contexto de configuracin de aplicacin de Spring, un bean con id "springSecurityFilterChain" en quien delegar las comprobaciones de seguridad. Esta configuracin de spring la incorporaremos a un fichero de contexto especfico, que nombraremos como spring- security.xml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <security:http> <security:intercept-url pattern="/userHome" access="IS_AUTHENTICATED_FULLY" /> <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:logout /> </security:http>
?

16

</beans>

De momento hemos configurado, a travs de la etiqueta security:http, que utilizaremos seguridad a nivel de peticiones http. Al configurar esta etiqueta, Spring crea y configura el bean springSecurityFilterChain y todos los filtros que forman parte de dicha cadena de filtros de seguridad. Tambin hemos aadido dos patrones de URL con las restriciones de seguridad, de forma que la ruta /userHome solo ser accesible para usuarios que estn autenticados y el resto para usuarios annimos (es decir, aquellos que no se hayan identificado todava). Por iltimo, debemos registrar un Listener que permita cargar y configurar este fichero de seguridad, de forma que el DelegatingFilterProxy funcione como esperamos. Para ello, completamos la definicin de nuestro descriptor web.xml 1 2 3 4 5 6 7 8 9
? <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring-security.xml</param-value> </context-param> <listener> <description>Spring context loader listener</description> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

Con esta configuracin, hemos configurado un ContextLoaderListener que se encargar de crear un contexto de Spring con la configuracin de spring-security.xml. Este contexto de Spring quedar asociado al contenedor de Servlets y, por tanto, accesible para el DispatcherServlet o el DelegatingFilterProxy definido en el mismo web.xml Con este apartado, ya tenemos configurada la gestin bsica de seguridad, pero an no hemos especificado cul es el mecanismo de Login que queremos utilizar.

Configuracin de Google como proveedor OAuth de autenticacin


Para aadir la llamada a Google para realizar la autenticacin, utilizaremos la librera spring-security-pac4j en la que ya se definen algunos componentes que, implementados como Proveedores de autenticacin sobre Spring-Security, gestionan el detalle de la llamada a cada varios Proveedores de autenticacin a travs de OAuth. Para este tutorial, nosotros nos limitaremos a utilizar el GoogleProvider, pero existen varias implementaciones adicionales, que nos permitirn configurar la autenticacin de usuarios con Facebook, Linkedin, twitter, y varios otros. Para utilizar los componentes de esta librera, aadiremos las coordenadas maven, a nuestra gestin de dependencias 1 2 3 4 5 <dependency> <groupId>com.github.leleuj.springframework.security</groupId> <artifactId>spring-security-oauth-client</artifactId> <version>1.1.0</version> </dependency>
?

Una vez aadidas las dependencias, podemos complementar la configuracin de spring-security.xml para hacer uso del proveedor de login

? !-- OAuth Authentication Providers definition --> "google2Provider" class="org.scribe.up.provider.impl.Google2Provider"> name="key" value="{pon aqui el Client ID creado en la consola de Google API (en el punto 1)}"/> name="secret" value="{secret Key de la consola de Google API}"/> name="scope" value="EMAIL_AND_PROFILE"/>

"providersDefinition" class="org.scribe.up.provider.ProvidersDefinition"> name="baseUrl" value="http://localhost:8080/j_spring_oauth_security_check" /> name="providers"> ref bean="google2Provider" /> > > "oAuthProvider" class="com.github.leleuj.ss.oauth.client.authentication.OAuthAuthenticationProvider"> name="providersDefinition" ref="providersDefinition" /> "google2EntryPoint" class="com.github.leleuj.ss.oauth.client.web.OAuthAuthenticationEntryPoint"> name="provider" ref="google2Provider" />

- OAUth Authentication filter --> "oAuthFilter" class="com.github.leleuj.ss.oauth.client.web.OAuthAuthenticationFilter"> name="providersDefinition" ref="providersDefinition" /> name="authenticationManager" ref="authenticationManager" />

Por ltimo, configuramos, tambin en spring-security.xml, para que el proveedor de autenticacin de Spring utilice este proveedor que conecta con Google, y configuramos cual es el entry-point por defecto para la seguridad http: 1 2 3 4 5 6 7 8 9 10 <security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="oAuthProvider"/> </security:authentication-manager> <security:http entry-point-ref="google2EntryPoint"> <security:custom-filter after="CAS_FILTER" ref="oAuthFilter" /> <security:intercept-url pattern="/userHome" access="IS_AUTHENTICATED_FULLY" /> <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <security:logout /> </security:http>
?

Por ltimo, ser necesario que volvamos a la consola de APIs de Google y modifiquemos, para nuestra aplicacin, la URL a la que debe volver Google una vez que la autenticacin haya sido realizada con xito. Para ello, sobre el CLient ID que creamos en el segundo paso de este tutorial, pulsamos sobre el enlace "Edit Settings..." y aadimos http://localhost:8080/j_spring_oauth_security_check como URL de callback autorizada para el login

Modificain de la URL de callback en la consola de Google

La prueba de la aplicacin
Con esta configuracin, podemos probar a desplegar nuestra aplicacin y comprobar que la autenticacin de google funciona correctamente Una vez desplegada la aplicacin, sin estar identificados an en el sistema, accedemos con el navegador a la direccin de la pgina pblica

Pgina de login para nuestra aplicacin Al pulsar en el botn "Entra", debera llevarnos a la url de la pgina protegida, pero saltar el filtro de seguridad que detecta que no estamos autenticados y, por tanto, no cumplimos las restricciones de seguridad especificadas en spring- security.xml. La accin configurada es autenticarnos utilizando el GoogleProvider que, nos llevar a la pgina de autenticacin de Google:

Login con Google Observamos que la URL ha cambiado y estamos identificndonos en el servidor de Google. Esta es una de las ventajas de OAuth, nuestra aplicacin nunca tiene que gestionar el proceso de validacin, siendo el proveedor de autenticacin quin se encarga de ello y nos dar un token de usuario en caso de que dicha validacin sea correcta. AL introducir nuestro usuario y pasword correctos en Google, se nos redirgir de nuevo a la parte protegida de nuestra aplicacin que, en este caso, simplemente muestra el token de seguiridad devuelto por Google (tal y como lo habamos configurado en nuestro controlador)

Pagina privada en nuestra aplicacin A partir de aqu, slo tendramos que ir aadiendo funcionalidad a nuestra aplicacin, aadiendo nuevos controladores a Spring y especificando sus restriciones de seguridad Cuando hemos configurado la autenticacin delegando el registro en proveedores externos, es habitual, permitir a los usuarios de nuestra aplicacin que puedan utilizar distintas cuentas personales (facebook, twitter, Linkedin, Google u otras). Para ello, una vez que hemos llegado a este punto, podriamos modificar ligeramente el proceso de login para permitir conectar con distintos proveedores de OAuth. Pero dejaremos esta modificacin para un segundo tutorial que publicar prximamente. Por ltimo, he dejado disponible el cdigo de este ejemplo en mi repositorio GitHub con ejemplos de Spring

Esta obra est licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5

Copyright 2003-2013 All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto

You might also like