0Pricing
Node.js Backend Development Bootcamp · Lección

Generación y validación de tokens JWT

Comprenda los JSON Web Tokens (JWT) e implemente su generación y validación para proteger el acceso a la API.

Generación y validación de tokens JWT es una lección gratuita de Node.js Backend Development Bootcamp en CoddyKit. Esta es la lección 2 de 6. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Node.js Backend Development Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Node.js Backend Development Bootcamp incluye 6 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Intro to JWT: What & Why

Welcome! In this lesson, we'll dive into JSON Web Tokens (JWTs), a popular way to secure APIs.

A JWT is a compact, URL-safe means of representing claims to be transferred between two parties. Think of it as a digital ID card for your API.

Why Use JWTs for APIs?

JWTs offer several advantages for modern web and mobile APIs:

  • Statelessness: The server doesn't need to store session information. Each request carries the user's authentication details.
  • Scalability: Easier to scale applications horizontally as there's no shared session state across servers.
  • Security: If implemented correctly, JWTs provide a secure way to verify user identity and prevent tampering.

JWT Structure: Three Parts

A JWT is a string made of three parts, separated by dots (.). Each part is Base64Url-encoded:

HEADER.PAYLOAD.SIGNATURE

Let's break down what each of these parts means and why they're important for security.

The JWT Header

The Header typically consists of two parts:

  • alg (Algorithm): Specifies the cryptographic algorithm used for signing the token (e.g., HS256, RS256).
  • typ (Type): Indicates that the token is a JWT.

Example (Base64Url-decoded):

{"alg": "HS256", "typ": "JWT"}

The JWT Payload (Claims)

The Payload contains the "claims" – statements about an entity (like a user) and additional data.

Claims can be:

  • Registered: Standard fields like iss (issuer), exp (expiration time), sub (subject).
  • Public: Custom claims registered in the IANA JWT Registry.
  • Private: Custom claims agreed upon by the sender and receiver.

Example Payload:

{"sub": "user123", "name": "Alice", "exp": 1678886400}

The JWT Signature

The Signature is crucial for verifying the token's authenticity and integrity. It ensures the token hasn't been tampered with.

It's created by taking the encoded header, the encoded payload, a secret key, and the algorithm specified in the header, then signing them.

Formula (simplified):

HMACSHA256(encodedHeader + "." + encodedPayload, secretKey)

Python: Generating a JWT

Let's generate a JWT using Python's PyJWT library. First, install it: pip install PyJWT.

We define a payload with an expiration time and a secret key.

import jwt
import datetime

def main():
    SECRET_KEY = "your-super-secret-key"

    # Define payload with some claims
    payload = {
        "sub": "user123",
        "name": "Alice",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30),
        "iat": datetime.datetime.utcnow()
    }

    # Encode the token
    token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
    print(f"Generated JWT: {token}")

if __name__ == "__main__":
    main()

Secret Keys & Security

The SECRET_KEY used to sign and verify JWTs is extremely important. If this key is compromised, an attacker could forge valid tokens, granting unauthorized access.

  • Always use a strong, randomly generated key.
  • Never hardcode it in your application; use environment variables or a secure key management service.
  • Keep it absolutely confidential!

Python: Validating a JWT

To validate a JWT, you decode it using the same secret key and algorithm. PyJWT automatically verifies the signature and checks claims like expiration (`exp`).

import jwt
import datetime
import time

def main():
    SECRET_KEY = "your-super-secret-key"

    # Generate a token to validate (short expiry for demo)
    payload_gen = {
        "sub": "user123",
        "name": "Bob",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=5), 
        "iat": datetime.datetime.utcnow()
    }
    token_to_validate = jwt.encode(payload_gen, SECRET_KEY, algorithm="HS256")
    print(f"Token to validate: {token_to_validate}\n")
    time.sleep(1) # Wait a bit for demonstration

    # Attempt to decode/validate it
    try:
        decoded_payload = jwt.decode(token_to_validate, SECRET_KEY, algorithms=["HS256"])
        print("Token is valid!")
        print(f"Decoded Payload: {decoded_payload}")
    except jwt.ExpiredSignatureError:
        print("Token has expired!")
    except jwt.InvalidTokenError:
        print("Invalid token (e.g., bad signature or format).")

if __name__ == "__main__":
    main()

JWT Best Practices

To keep your JWT implementation secure:

  • Set Expiration (exp): Always include an expiration claim to limit the window of a compromised token.
  • HTTPS: Always transmit JWTs over HTTPS to prevent eavesdropping.
  • Secure Storage: Store tokens securely on the client-side (e.g., HTTP-only cookies for web, secure storage for mobile).
  • Refresh Tokens: For long sessions, use short-lived access tokens and longer-lived refresh tokens.

Check Your Understanding

Review the components of a JWT. Which of the following parts is responsible for ensuring the token hasn't been tampered with?

Recap: JWT Essentials

In this lesson, we explored JSON Web Tokens (JWTs) for secure API authentication.

  • JWTs are compact, URL-safe tokens with a Header, Payload, and Signature.
  • The Header defines the token type and signing algorithm.
  • The Payload carries "claims" (data like user ID, roles, expiration).
  • The Signature verifies the token's integrity and authenticity.
  • We learned to generate and validate JWTs using Python's PyJWT library.
  • Always use strong, secret keys and set expiration times for security.

Next, we'll integrate JWTs into FastAPI using OAuth2 for a complete authentication flow!

Preguntas frecuentes

¿La lección «Generación y validación de tokens JWT» es gratis?

Sí — el texto completo de «Generación y validación de tokens JWT» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Node.js Backend Development Bootcamp, actualiza a CoddyKit PRO. El curso de Node.js Backend Development Bootcamp incluye 6 lecciones en total.

¿Qué aprenderé en «Generación y validación de tokens JWT»?

Comprenda los JSON Web Tokens (JWT) e implemente su generación y validación para proteger el acceso a la API. Practicas Node.js Backend Development Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Node.js Backend Development Bootcamp?

No se requiere experiencia previa. Node.js Backend Development Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 6.

¿Cuánto tiempo toma la lección «Generación y validación de tokens JWT»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Node.js Backend Development Bootcamp?

Sí. Cada lección de Node.js Backend Development Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Registro e inicio de sesión de usuarios
  2. Generación y validación de tokens JWT
  3. JWT para autenticación sin estado
  4. Integración del flujo de contraseña de OAuth2
  5. Control de acceso basado en roles
  6. Control de acceso basado en roles (RBAC)
← Volver a Node.js Backend Development Bootcamp