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
endgo
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.