fbpx
Wikipedia

JSON Web Token

JSON Web Token (abreviado JWT) es un estándar abierto basado en JSON propuesto por IETF (RFC 7519) para la creación de tokens de acceso que permiten la propagación de identidad y privilegios o claims en inglés. Por ejemplo, un servidor podría generar un token indicando que el usuario tiene privilegios de administrador y proporcionarlo a un cliente. El cliente entonces podría utilizar el token para probar que está actuando como un administrador en el cliente o en otro sistema.  El token está firmado por la clave del servidor, así que el cliente y el servidor son ambos capaz de verificar que el token es legítimo. Los JSON Web Tokens están diseñados para ser compactos, poder ser enviados en las URLs -URL-safe- y ser utilizados en escenarios de Single Sign-On (SSO). Los privilegios de los JSON Web Tokens puede ser utilizados para propagar la identidad de usuarios como parte del proceso de autenticación entre un proveedor de identidad y un proveedor de servicio, o cualquiera otro tipo de privilegios requeridos por procesos empresariales.[1][2][3][4]

El estándar de JWT se basa en otros estándares basados en JSON JSON Web Signature (RFC 7515) y JSON Web Encryption (RFC 7516)

Estructura

Los JSON Web Tokens generalmente están formados por tres partes: un encabezado o header, un contenido o payload, y una firma o signature. El encabezado identifica qué algoritmo fue usado para generar la firma y normalmente se ve de la siguiente forma:

header = '{"alg":"HS256","typ":"JWT"}' 

HS256 indica que este token está firmado utilizando HMAC-SHA256.

El contenido contiene la información de los privilegios o claims del token:

payload = '{"loggedInAs":"admin","iat":1422779638}' 

El estándar sugiere incluir una marca temporal o timestamp en inglés, llamado iat para indicar el momento en el que el token fue creado.

La firma está calculada codificando el encabezamiento y el contenido en base64url,  concatenándose ambas partes con un punto como separador:

key  = 'secretkey' unsignedToken = encodeBase64Url(header) + '.' + encodeBase64Url(payload) signature = HMAC-SHA256(key, unsignedToken) 

En el token,  las tres partes -encabezado, contenido y firma- están concatenadas utilizando puntos de la siguiente forma:

token = encodeBase64Url(header) + '.' + encodeBase64Url(payload) + '.' + encodeBase64Url(signature) # token es: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI 

El token puede ser fácilmente transmitido en entornos HTMLHTTP, siendo similar a estándares basados en XML como SAML. Generalmente los algoritmos de cifrado utilizados son HMAC con SHA-256 (HS256) y firma digital con SHA-256 (RS256).

Uso

En autorización se logra cuando el usuario ingresa sus credenciales con éxito, entonces se genera un JSON Web Token que es retornado al cliente, quien tiene que guardarlo localmente, en vez del modelo tradicional de crear una sesión en el servidor y retornar una cookie.

Siempre que el usuario quiere acceder a una ruta protegida o recurso, el cliente tiene que enviar el JWT, generalmente en el encabezado de Authorization utilizando el esquema Bearer. El contenido del encabezado HTTP se ve de la siguiente forma:

Authorization: Bearer eyJhbGci...<snip>...yu5CSpyHI

Este es un mecanismo de autenticación sin estado - stateless- ya que la sesión del usuario nunca se guarda en el proveedor de identidad o en el proveedor del servicio. Los recursos protegidos siempre comprobaran si existe un JWT válido en cada pedido de acceso. Si el token está presente y es válido, el proveedor del servicio otorga accesos a los recursos protegidos. Como los JWTs contienen toda la información necesaria en sí mismos, se reduce la necesidad de consultar la base de datos u otras fuentes de información múltiples veces. 

Campos estándares

El estándar define los siguientes campos que pueden incluirse en los tokens JWT: 

Código Nombre Descripción
iss Issuer Identifica el proveedor de identidad que emitió el JWT
sub Subject Identifica el objeto o usuario en nombre del cual fue emitido el JWT
aud Audience Identifica la audiencia o receptores para lo que el JWT fue emitido, normalmente el/los servidor/es de recursos (e.g. la API protegida). Cada servicio que recibe un JWT para su validación tiene que controlar la audiencia a la que el JWT está destinado. Si el proveedor del servicio no se encuentra presente en el campo aud, entonces el JWT tiene que ser rechazado
exp Expiration time Identifica la marca temporal luego de la cual el JWT no tiene que ser aceptado. 
nbf Not before Identifica la marca temporal en que el JWT comienza a ser válido. EL JWT no tiene que ser aceptado si el token es utilizando antes de este tiempo. 
iat Issued at Identifica la marca temporal en qué el JWT fue emitido.
jti JWT ID Identificador único del token incluso entre diferente proveedores de servicio.

Los campos siguientes pueden ser utilizados en el encabezado:

Código Nombre Descripción
typ Token type Si está presente, se recomienda utilizar el valor JWT.
cty Content type En casos normales, no es recomendado. En casos de firma o cifrado anidado, debe está presente y el valor debe ser JWT.
alg Message authentication code algorithm El proveedor de identidad puede elegir libremente el algoritmo para verificar la firma del token, aunque algunos de los algoritmos soportados son inseguros.
Cualquiera de los otros campos introducidos por JWS y JWE.

Implementaciones

Algunas de las implementaciones de JWT que existen: 

Puede encontrarse una lista detallada con las especificaciones de cada implementación en https://jwt.io/#libraries-io

Referencias

  1. John, Bradley. «JSON Web Token (JWT)». tools.ietf.org. Consultado el 14 de noviembre de 2016. 
  2. Sevilleja, Chris. «The Anatomy of a JSON Web Token». Consultado el 8 de mayo de 2015. 
  3. «JSON Web Tokens - jwt.io». jwt.io. Consultado el 8 de mayo de 2015. 
  4. McLean, Tim (31 de marzo de 2015). «Critical vulnerabilities in JSON Web Token libraries». Auth0. Consultado el 29 de marzo de 2016. 
  5. libjwt on github.com
  6. cljwt on github.com
  7. «dgrijalva/jwt-go». GitHub (en inglés). Consultado el 8 de enero de 2018. 
  8. jwt-dotnet on github.com
  9. Crypt::JWT on cpan.org
  10. JSON-WebToken on github.com
  11. lcobucci/jwt on github.com
  12. «jpadilla/pyjwt». GitHub (en inglés). Consultado el 21 de marzo de 2017. 
  13. ruby-jwt on github.com
  14. frank_jwt on github.com
  15. jwt-scala on github.com
  16. «liquidz/clj-jwt». GitHub (en inglés). Consultado el 28 de abril de 2018. 
  17. «bryanjos/joken». GitHub (en inglés). Consultado el 28 de abril de 2018. 
  18. «artemeff/jwt». GitHub (en inglés). Consultado el 28 de abril de 2018. 
  19. «Web.JWT». hackage.haskell.org. Consultado el 28 de abril de 2018. 
  20. auth0/java-jwt on github.com
  21. «auth0/jwt-decode». GitHub (en inglés). Consultado el 28 de abril de 2018. 
  22. «SkyLothar/lua-resty-jwt». GitHub (en inglés). Consultado el 28 de abril de 2018. 
  23. «jwt-js». npm. Consultado el 28 de abril de 2018. 

Enlaces externos

  • jwt.io @– Sitio web especializado sobre JWT con herramientas y documentación, mantenidos por Auth0
  • jwt tool @– Herramienta JWT en línea y preguntas frecuentes
  • JSON Validator Validar cadena de token web JSON
  •   Datos: Q22284678

json, token, abreviado, estándar, abierto, basado, json, propuesto, ietf, 7519, para, creación, tokens, acceso, permiten, propagación, identidad, privilegios, claimsen, inglés, ejemplo, servidor, podría, generar, token, indicando, usuario, tiene, privilegios, . JSON Web Token abreviado JWT es un estandar abierto basado en JSON propuesto por IETF RFC 7519 para la creacion de tokens de acceso que permiten la propagacion de identidad y privilegios o claimsen ingles Por ejemplo un servidor podria generar un token indicando que el usuario tiene privilegios de administrador y proporcionarlo a un cliente El cliente entonces podria utilizar el token para probar que esta actuando como un administrador en el cliente o en otro sistema El token esta firmado por la clave del servidor asi que el cliente y el servidor son ambos capaz de verificar que el token es legitimo Los JSON Web Tokens estan disenados para ser compactos poder ser enviados en las URLs URL safe y ser utilizados en escenarios de Single Sign On SSO Los privilegios de los JSON Web Tokens puede ser utilizados para propagar la identidad de usuarios como parte del proceso de autenticacion entre un proveedor de identidad y un proveedor de servicio o cualquiera otro tipo de privilegios requeridos por procesos empresariales 1 2 3 4 El estandar de JWT se basa en otros estandares basados en JSON JSON Web Signature RFC 7515 y JSON Web Encryption RFC 7516 Indice 1 Estructura 2 Uso 3 Campos estandares 4 Implementaciones 5 Referencias 6 Enlaces externosEstructura EditarLos JSON Web Tokens generalmente estan formados por tres partes un encabezado o header un contenido o payload y una firma o signature El encabezado identifica que algoritmo fue usado para generar la firma y normalmente se ve de la siguiente forma header alg HS256 typ JWT HS256 indica que este token esta firmado utilizando HMAC SHA256 El contenido contiene la informacion de los privilegios o claimsdel token payload loggedInAs admin iat 1422779638 El estandar sugiere incluir una marca temporal o timestamp en ingles llamado iat para indicar el momento en el que el token fue creado La firma esta calculada codificando el encabezamiento y el contenido en base64url concatenandose ambas partes con un punto como separador key secretkey unsignedToken encodeBase64Url header encodeBase64Url payload signature HMAC SHA256 key unsignedToken En el token las tres partes encabezado contenido y firma estan concatenadas utilizando puntos de la siguiente forma token encodeBase64Url header encodeBase64Url payload encodeBase64Url signature token es eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9 gzSraSYS8EXBxLN oWnFSRgCzcmJmMjLiuyu5CSpyHI El token puede ser facilmente transmitido en entornos HTML y HTTP siendo similar a estandares basados en XML como SAML Generalmente los algoritmos de cifrado utilizados son HMAC con SHA 256 HS256 y firma digital con SHA 256 RS256 Uso EditarEn autorizacion se logra cuando el usuario ingresa sus credenciales con exito entonces se genera un JSON Web Token que es retornado al cliente quien tiene que guardarlo localmente en vez del modelo tradicional de crear una sesion en el servidor y retornar una cookie Siempre que el usuario quiere acceder a una ruta protegida o recurso el cliente tiene que enviar el JWT generalmente en el encabezado de Authorization utilizando el esquema Bearer El contenido del encabezado HTTP se ve de la siguiente forma Authorization Bearer eyJhbGci i lt snip gt i yu5CSpyHIEste es un mecanismo de autenticacion sin estado stateless ya que la sesion del usuario nunca se guarda en el proveedor de identidad o en el proveedor del servicio Los recursos protegidos siempre comprobaran si existe un JWT valido en cada pedido de acceso Si el token esta presente y es valido el proveedor del servicio otorga accesos a los recursos protegidos Como los JWTs contienen toda la informacion necesaria en si mismos se reduce la necesidad de consultar la base de datos u otras fuentes de informacion multiples veces Campos estandares EditarEl estandar define los siguientes campos que pueden incluirse en los tokens JWT Codigo Nombre Descripcioniss Issuer Identifica el proveedor de identidad que emitio el JWTsub Subject Identifica el objeto o usuario en nombre del cual fue emitido el JWTaud Audience Identifica la audiencia o receptores para lo que el JWT fue emitido normalmente el los servidor es de recursos e g la API protegida Cada servicio que recibe un JWT para su validacion tiene que controlar la audiencia a la que el JWT esta destinado Si el proveedor del servicio no se encuentra presente en el campo aud entonces el JWT tiene que ser rechazadoexp Expiration time Identifica la marca temporal luego de la cual el JWT notieneque ser aceptado nbf Not before Identifica la marca temporal en que el JWT comienza a ser valido EL JWT no tiene que ser aceptado si el token es utilizando antes de este tiempo iat Issued at Identifica la marca temporal en que el JWT fue emitido jti JWT ID Identificador unico del token incluso entre diferente proveedores de servicio Los campos siguientes pueden ser utilizados en el encabezado Codigo Nombre Descripciontyp Token type Si esta presente se recomienda utilizar el valor JWT cty Content type En casos normales no es recomendado En casos de firma o cifrado anidado debe esta presente y el valor debe ser JWT alg Message authentication code algorithm El proveedor de identidad puede elegir libremente el algoritmo para verificar la firma del token aunque algunos de los algoritmos soportados son inseguros Cualquiera de los otros campos introducidos por JWS y JWE Implementaciones EditarAlgunas de las implementaciones de JWT que existen C 5 Common Lisp 6 Go 7 NET 8 Perl 9 Perl6 10 PHP 11 Python 12 Ruby 13 Rust 14 Scala 15 Clojure 16 Elixir 17 Erlang 18 Haskell 19 Java 20 JavaScript 21 Lua 22 Node js 23 Puede encontrarse una lista detallada con las especificaciones de cada implementacion en https jwt io libraries ioReferencias Editar John Bradley JSON Web Token JWT tools ietf org Consultado el 14 de noviembre de 2016 Sevilleja Chris The Anatomy of a JSON Web Token Consultado el 8 de mayo de 2015 JSON Web Tokens jwt io jwt io Consultado el 8 de mayo de 2015 McLean Tim 31 de marzo de 2015 Critical vulnerabilities in JSON Web Token libraries Auth0 Consultado el 29 de marzo de 2016 libjwt on github com cljwt on github com dgrijalva jwt go GitHub en ingles Consultado el 8 de enero de 2018 jwt dotnet on github com Crypt JWT on cpan org JSON WebToken on github com lcobucci jwt on github com jpadilla pyjwt GitHub en ingles Consultado el 21 de marzo de 2017 ruby jwt on github com frank jwt on github com jwt scala on github com liquidz clj jwt GitHub en ingles Consultado el 28 de abril de 2018 bryanjos joken GitHub en ingles Consultado el 28 de abril de 2018 artemeff jwt GitHub en ingles Consultado el 28 de abril de 2018 Web JWT hackage haskell org Consultado el 28 de abril de 2018 auth0 java jwt on github com auth0 jwt decode GitHub en ingles Consultado el 28 de abril de 2018 SkyLothar lua resty jwt GitHub en ingles Consultado el 28 de abril de 2018 jwt js npm Consultado el 28 de abril de 2018 Enlaces externos Editarjwt io Sitio web especializado sobre JWT con herramientas y documentacion mantenidos por Auth0 jwt tool Herramienta JWT en linea y preguntas frecuentes JSON Validator Validar cadena de token web JSON Datos Q22284678 Obtenido de https es wikipedia org w index php title JSON Web Token amp oldid 137047719, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos