Skip to content

Token de acceso

En noauth.sh, un token de acceso o accessTokenes un JWT (JSON Web Token) que se genera cuando un usuario se autentica correctamente tras usar signin o remoteSignin.

Este token permite autorizar las solicitudes de tus usuarios en tu servidor. Puedes utilizarlo como filtro de acceso (gatekeeper) en tu API o bien como mecanismo de intercambio para establecer una cookie de sesión.

Validar token de acceso

Ejemplo de validación del token en diferentes lenguajes.

En tu servidor:

javascript
import jwt from "jsonwebtoken";

function authenticate(accessToken) {
  try {
    const { email } = jwt.verify(accessToken, SECRET_KEY);
    // ...otras validaciones y gestión de sesión utilizando el email
  } catch (error) {
    // token inválido o vencido
    throw new Error("Token inválido", error.message);
  }
}
python
import jwt

def authenticate(access_token):
  try:
    decoded = jwt.decode(access_token, SECRET_KEY, algorithms=["HS256"])
    email = decoded["email"]
    # ...otras validaciones y gestión de sesión utilizando el email
  except jwt.InvalidTokenError as e:
    # token inválido o vencido
    raise Exception(f"Token inválido: {str(e)}")
php
<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

function authenticate($accessToken) {
  try {
    $decoded = JWT::decode($accessToken, new Key(SECRET_KEY, 'HS256'));
    $email = $decoded->email;
    // ...otras validaciones y gestión de sesión utilizando el email
  } catch (Exception $e) {
    // token inválido o vencido
    throw new Exception("Token inválido: " . $e->getMessage());
  }
}
ruby
require 'jwt'

def authenticate(access_token)
  begin
    decoded = JWT.decode(access_token, SECRET_KEY, true, { algorithm: 'HS256' })
    email = decoded[0]['email']
    # ...otras validaciones y gestión de sesión utilizando el email
  rescue JWT::DecodeError => e
    # token inválido o vencido
    raise "Token inválido: #{e.message}"
  end
end
go
import (
  "errors"
  "github.com/golang-jwt/jwt/v5"
)

func authenticate(accessToken string) error {
  token, err := jwt.Parse(accessToken, func(token *jwt.Token) (interface{}, error) {
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
      return nil, errors.New("método de firma inesperado")
    }
    return []byte(SECRET_KEY), nil
  })

  if err != nil || !token.Valid {
    // token inválido o vencido
    return errors.New("token inválido: " + err.Error())
  }

  if claims, ok := token.Claims.(jwt.MapClaims); ok {
    email := claims["email"].(string)
    // ...otras validaciones y gestión de sesión utilizando el email
  }

  return nil
}

TIP

El valor de SECRET_KEY lo puedes encontrar en la configuración de tu aplicación.

IMPORTANTE

Recuerda almacenar tu SECRET_KEY en variables de entorno y nunca exponerla en tu código fuente.