miércoles, 8 de octubre de 2014

Anotaciones Java

Hola

Esta entrada voy a explicar como crear  nuestras propias anotaciones java y usarlo. Las anotaciones Java aparecieron en la version 1.5 de java, seguro que lo habéis usado por ejemplo:

  • @Override
  • @SuppresWarning
  • @Deprecated
Para crear nuestro anotación tenemos que crear una interface pero un poco especial como podemos ver en ejemplo tenemos que poner la @ delante de la palabra interface.


@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnotacion{
String valorInicial() default "algo";
}

Vamos a analizar el codigo, lo primero el @Target es donde determinamos donde podemos usar nuestra anotación a nivel de clase, metodo, campos, etc. Los valores posibles son los siguientes:
  • ANNOTATION_TYPE
  • CONSTRUCTOR
  • FIELD  
  • LOCAL_VARIABLE 
  • METHOD  
  • PACKAGE 
  • PARAMETER  
  • TYPE
Como se puede ver el mismo nombre nos indica donde podemos usar nuestras anotaciones, tambien podemos usar combinaciones por ejemplo

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})

La siguiente linea analizar es @Retention determina cuanto tiempo deben estar disponibles los datos de la anotación, los valores posible son los siguientes:
  • SOURCE : Solo visible en source ignorada por el compilador y JVM
  • CLASS : El compilador lo puede ver y actuar pero es ignorada JVM
  • RUNTIME : La JVM puede ver la anotacion y utilizar en tiempo de ejecucion por reflection
Con esto ya tenemos nuestra anotación como podeis ver se puede asignar valores por defecto usando la palabra reservada default.

Como simpre esto se ve mejor con un ejemplo, tengo un ejemplo subido a github.com 

martes, 7 de octubre de 2014

Oauth 2.0 (seguridad nuestra Api Rest)

Hola

En esta entrega vamos a hablar Oauth (Open Authorization) es un protocolo abierto,
que permite autorización segura de una API de modo estándar y simple para aplicaciones de escritorio, móviles y web.

En como siempre vamos a explicar lo que es oauth version 2.0 y posteriormente un ejemplo. A continuación se muetra una imagen mostrando el baile de Oauth 2.0



El acceso de los clientes a su aplicación (1) y hace que la solicitud para acceder a un recurso protegido (2).
 El servidor de autenticación devuelve un token de acceso basado en las credenciales de usuario publicado (3).  Después, el usuario realiza una solicitud para acceder a los recursos con el token obtenido anteriormente (4).  Una vez que el token se valida, el servidor de recursos devuelve el recurso protegido a la aplicación cliente (5).

Asi se tiene una idea global del funcionamiento de Oauth 2.0, ahora vamos a ver un diagramas que muestra mas claro el funcionamiento








Este ejemplo muestra como sería usando grant_type "password y refresh_token", hay más opciones que no vamos a ver aquí pero si quereís más información.

Como véis la primera petición se envía la información de usuario, contraseña, client_id y password, la respuesta es el access_token y token_refesh. El access_token es el token que vamos a usar para poder acceder a los recursos, como podemos ver en la segunda petición.

Los tokens tiene un tiempo de duración, cuando accedemos a los recursos y obtenemos el mensaje “invalid_token” debemos solicitar un nuevo token usando el token_refresh que obtenimos anteriormente.





Como veis la petición de refresco del token es muy parecida a la de obtención de token (no enviamos el usuario y contraseña)

Como se puede ver es muy intuitivo el protocolo oauth 2.0 como siempre hay varias implementaciones de oauth 2.0:


  • Spring Oauth
  • Apache Oltu
  • Picketlink
El ejemplo que tenemos hemos usado Spring Oauth 2.0, como siempre esta subido a github.com