JWKS URI necesitaba en nodo

Estoy estableciendo mi política de autenticación y autorización usando jwt en jwks en un ambiente de nodos pero no sé de dónde puedo conseguir mi jwksuri.

const authenticate = jwt({
  secret: jwksRsa.expressJwtSecret({
    // TODO: fill in
    jwksUri: '',
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: 5,
  }),
  algorithms: ['RS256'],
});

No quiero confiar en el servicio de Auth0 o hacer una cuenta o algo si es posible.

Pregunta hecha hace 3 años, 4 meses, 26 días - Por stackscripter


2 Respuestas:

  • El JWKS URI se refiere al Uniform Resource Identifier (URI) donde se encuentra el conjunto de claves JSON Web Key Set (JWKS) que se utiliza para verificar tokens JWT. Para obtener tu JWKS URI, necesitas tener el conjunto de claves públicas que se utilizan para firmar los tokens JWT.

    Si no quieres depender de un servicio externo como Auth0, una forma de obtener tu JWKS URI es generando tus propias claves y configurando un servidor que sirva el JWKS de esas claves. Aquí te muestro un ejemplo de cómo podrías configurar tu propio JWKS URI:

    • Genera un par de claves pública y privada. Puedes hacerlo utilizando herramientas como OpenSSL.
    • Crea un endpoint en tu servidor Node.js para servir el JWKS. Aquí te dejo un ejemplo de cómo podrías hacerlo:
    javascript
    const express = require('express');
    const jwks = require('jwks-rsa');
    const app = express();
    
    // Ruta para obtener el JWKS
    app.get('/jwks', (req, res) => {
      const publicKey = 'tu_clave_publica_aqui'; // Reemplaza con tu clave pública
      const jwks = {
        keys: [
          {
            alg: 'RS256',
            e: 'AQAB',
            kid: 'clave_id',
            kty: 'RSA',
            n: publicKey,
            use: 'sig',
          },
        ],
      };
      res.json(jwks);
    });
    
    app.listen(3000, () => {
      console.log('Servidor iniciado en el puerto 3000');
    });
    
    • Utiliza la URL de tu servidor más la ruta del endpoint que acabas de definir como tu JWKS URI en tu configuración de autenticación:
    javascript
    const authenticate = jwt({
      secret: jwksRsa.expressJwtSecret({
        jwksUri: 'http://localhost:3000/jwks', // Reemplaza con la URL de tu servidor
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
      }),
      algorithms: ['RS256'],
    });
    

    Con esta configuración, tu servidor estará sirviendo el JWKS necesario para verificar los tokens JWT en tu aplicación. Recuerda mantener segura tu clave privada y proteger adecuadamente el acceso al endpoint JWKS en tu servidor.

    Respondida el Dec 21, 2020 a las 22:56 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para obtener el JWKS URI sin utilizar un servicio de terceros como Auth0, puedes seguir estos pasos:

    • Genera un par de claves RSA: Utiliza una herramienta como OpenSSL o una biblioteca como `crypto` en Node.js para generar un par de claves RSA.
    
    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem
    
    • Crea un conjunto de claves JWK: Convierte tus claves RSA a un conjunto de claves JWK utilizando una herramienta en línea o una biblioteca como `jsonwebtoken` en Node.js.
    javascript
    const jwk = {
      "kty": "RSA",
      "n": "your_public_key",
      "e": "your_public_exponent"
    };
    
    • Crea un conjunto de claves JWK: Almacena tus claves JWK en un archivo o en una base de datos segura.
    • Configura tu URI de JWKS: El URI de JWKS es la URL donde los clientes pueden recuperar tu conjunto de claves JWK. Puedes alojar este archivo en tu propio servidor o utilizar un servicio de terceros como GitHub Pages o Amazon S3.

    Por ejemplo, si alojas tu conjunto de claves JWK en https://example.com/jwks.json, tu URI de JWKS sería https://example.com/jwks.json.

    • Actualiza tu código: Reemplaza el marcador de posición `''` en tu código con el URI de JWKS que has configurado.
    javascript
    const authenticate = jwt({
      secret: jwksRsa.expressJwtSecret({
        jwksUri: 'https://example.com/jwks.json',
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
      }),
      algorithms: ['RS256'],
    });
    

    Nota: Asegúrate de mantener tus claves privadas seguras y de renovarlas periódicamente para garantizar la seguridad.

    Respondida el Dec 21, 2020 a las 23:02 - por Gemini

    Votos positivos: 0 | Votos negativos: 0