Un JSON Web Token es un estandar abierto para la creación de Token de Acceso el cual permite firmar digitalmente información en un string para posteriormente validar en este los privilegios e identidad de un usuario en un sistema.
Existen muchas librerías en varios lenguajes para la generación de estos Tokens, una opción para el lenguaje Java es JJWT (Java JWT) el cual es una biblioteca que pretende simplificar la generación y verificación de estos JSON Web Token.
JJWT es una implementación pura de Java basada exclusivamente en las especificaciones JWT, JWS, JWE, JWK y JWA RFC. JWT es de código abierto bajo los términos de la licencia Apache 2.0.
JJWT tiene soporte para la creación, análisis y verificación de JWT compactos firmados digitalmente (también conocidos como JWS) con todos los algoritmos JWS estándar:
Instalación
Maven:
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.10.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.10.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.10.5</version> <scope>runtime</scope> </dependency> <!-- Uncomment this next dependency if you want to use RSASSA-PSS (PS256, PS384, PS512) algorithms: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.60</version> <scope>runtime</scope> </dependency> -->
Gradle:
dependencies { compile 'io.jsonwebtoken:jjwt-api:0.10.5' runtime 'io.jsonwebtoken:jjwt-impl:0.10.5', // Uncomment the next line if you want to use RSASSA-PSS (PS256, PS384, PS512) algorithms: //'org.bouncycastle:bcprov-jdk15on:1.60', 'io.jsonwebtoken:jjwt-jackson:0.10.5' }
Proyectos en Android:
Dependencias:
dependencies { api 'io.jsonwebtoken:jjwt-api:0.10.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.10.5' runtimeOnly('io.jsonwebtoken:jjwt-orgjson:0.10.5') { exclude group: 'org.json', module: 'json' //provided by Android natively } // Uncomment the next line if you want to use RSASSA-PSS (PS256, PS384, PS512) algorithms: //runtimeOnly 'org.bouncycastle:bcprov-jdk15on:1.60' }
Proguard:
-keepattributes InnerClasses -keep class io.jsonwebtoken.** { *; } -keepnames class io.jsonwebtoken.* { *; } -keepnames interface io.jsonwebtoken.* { *; } -keep class org.bouncycastle.** { *; } -keepnames class org.bouncycastle.** { *; } -dontwarn org.bouncycastle.**
Ejemplo en Android
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.security.Key; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.crypto.spec.SecretKeySpec; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; public class MainActivity extends AppCompatActivity { private String SECRET = "DelapatriaelaltonombreengloriosoesplendorconservemosyensusarasdenuevojuremosmMorirantesqueesclavosvivir"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Generacion de JSOn Web Token String jwt = crearJWT("mouse","JC", "cliente",300000); Log.d("JWT", jwt); leerJWT(jwt); } private void leerJWT(String jwt){ Key key = new SecretKeySpec(SECRET.getBytes(), SignatureAlgorithm.HS512.getJcaName()); Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody(); Log.d("JWT", "Subject: " + claims.getSubject()); Log.d("JWT", "Issuer: " + claims.getIssuer()); Log.d("JWT", "Level: " + claims.get("lvl")); Log.d("JWT", "Exp: " + claims.getExpiration()); } /** * @param issuer Proveedor que emitio el JWT * @param subject Usuario en nombre del cual fue emitido el JWT * @param level Nivel del usuario * @param ttlMillis Tiempo de vida del token en milisegundos * @return String JWT */ public String crearJWT(String issuer, String subject, String level, long ttlMillis) { Key key = new SecretKeySpec(SECRET.getBytes(), SignatureAlgorithm.HS512.getJcaName()); //Momento de creación del token long nowMillis = System.currentTimeMillis(); Date now = new Date(nowMillis); //Tiempo de expiración long expMillis = nowMillis + ttlMillis; Date exp = new Date(expMillis); //header Map<String,Object> header = new HashMap(); header.put("typ", "JWT"); String jws = Jwts.builder() .setHeaderParams(header) //claim personalizado .claim("lvl",level) //claim standar .setIssuer(issuer) .setSubject(subject) .setExpiration(exp) .setIssuedAt(now) //firma .signWith(key,SignatureAlgorithm.HS512) .compact(); return jws; } }
Este código nos genera un Token el cual podemos verificar con esta herramienta online https://jwt.io/
JSON Web Token:
Verificación:
enjoy!!!
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial...
En este tutorial veremos como usar el componente Slider de JavaFX , capturas los cambios que realice el usuario y con es...
En este tutorial personalizaremos un JTextField java para darle la apariencia de un TextBox de Windows Metro. El TextBox...
Slim es un micro framework para PHP que nos ayuda a escribir rápidamente aplicaciones Web y APIs sencillas pero poderosa...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
El Viaje Astral del Tata Quispe, así titula un nuevo juego boliviano desarrollado por la empresa VReality el cual esta i...
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...