Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Incrusta una gráfica autenticada utilizando un proveedor JWT personalizado

Muchos sitios web utilizan sistemas de autenticación que generan JWTs para representar a un usuario autenticado. Si tu sitio web produce JWTs, puedes configurar Charts para validar los tokens existentes y autorizar la visualización de las gráficas integradas. Alternativamente, si tu sitio no utiliza JWTcomo parte del proceso de autenticación, puedes escribir código para generar JWTexplícitamente con el fin de autorizar el renderizado de gráficas.

Este tutorial muestra el último enfoque. El ejemplo te muestra cómo generar un JWT simple para un usuario autenticado y enviarlo a Charts.

Charts utiliza la información que se proporciona al configurar un proveedor para validar JWTs que recibe con las solicitudes para renderizar gráficos incrustados. Si el token no es válido o no se ajusta a los detalles que proporcionaste, Charts no renderiza la vista autenticada de la gráfica.

  • Debes ser un Atlas Propietario del proyecto para configurar los proveedores de autenticación de incrustación para tu instancia de Charts vinculada.

  • Crea un nuevo tablero

  • Crear una gráfica

Habilita la incrustación autenticada para generar una URL base de Charts y una ID de gráfica. Necesitarás la URL base de Charts y el ID de la gráfica para mostrar la gráfica en una página web.

1

Desde el Dashboards en la página, selecciona el tablero que contiene la gráfica que deseas insertar. Para obtener instrucciones sobre cómo navegar a los Tableros, consulte Tableros.

2

Desde el tablero, haz clic en en la parte superior derecha de la gráfica para acceder a su información de inserción. Seleccione Embed chart del menú desplegable.

Nota

Si una gráfica se encuentra en un tablero que tiene integración activada, la opción Embed Chart se activa automáticamente. Por lo tanto, no puedes seleccionar la opción Embed chart para las gráficas dentro de los tableros que tienen habilitada la incrustación.

3

Si ya has habilitado el uso compartido externo en el origen de datos que utiliza esta gráfica, omite este paso. Si aún no has activado la integración en la fuente de datos, puedes hacerlo ahora. Haz clic en el enlace Configure external sharing.

4
Incrustar gráfica autenticada
haga clic para ampliar
5
6

Puede especificar una función para inyectar un documento de filtro de MongoDB para cada usuario que vea la gráfica. Esto es útil para generar gráficas específicas de usuario.

Ejemplo

La siguiente función de filtro solo renderiza datos donde la ownerId el campo de un documento coincide con el valor del campo sub del token del proveedor de autenticación de embedding:

function getFilter(context) {
return { ownerId: context.token.sub };
}

Tip

Para obtener más información sobre cómo inyectar filtros por usuario, consulta Inyecta Filtros Específicos para Usuarios.

7

Especifica los campos en los que los espectadores de la gráfica pueden filtrar los datos. Por defecto, no hay campos especificados, lo que significa que no se puede filtrar la gráfica hasta que se permita explícitamente al menos un campo.

Tip

Para aprender más sobre los campos que se pueden filtrar, consulte Especificar campos filtrables.

8

Usa estos valores en el código de tu aplicación junto con los atributos de tu proveedor de autenticación embebida para incrustar tu gráfica.

Nota

Cuando configuras la autenticación utilizando un proveedor JWT personalizado, puedes elegir el algoritmo de firma. Este tutorial utiliza el algoritmo de firma HS256. Si seleccionas el algoritmo de firma RS256, también puedes elegir una de las siguientes claves de firma:

  • Clave web JSON (JWK) o URL del conjunto de claves web JSON (JWKS): Charts recupera la clave del archivo JWK o JWKS en la URL especificada. Luego, Charts utiliza la clave para validar el JSON web token. Si hay varias claves en el archivo, Charts prueba cada una hasta encontrar una coincidencia.

  • Clave pública PEM: Charts utiliza la llave pública especificada para verificar el JSON web token.

1

Si Atlas Charts aún no está activado, haz clic en Visualization bajo el encabezado Services en la barra lateral de la interfaz de usuario de Atlas.

Atlas lanza una instancia de Charts vinculada a tu proyecto.

2

Haga clic en Embedded Visualizations en el encabezado Services en la barra lateral Visualization.

Se muestra la página Visualizaciones integradas.

3

Nota

Debe ser un propietario del proyecto para acceder a la página Authentication Settings. Como usuario que no es administrador, todavía puede usar gráficas integradas, pero debe obtener una clave de un propietario del proyecto.

Haz clic en la pestaña Authentication Settings.

Se muestra la pestaña Configuración de autenticación.

4
  1. Desde la sección Authentication providers, haz clic en Add.

  2. Proporcione los siguientes valores para configurar Charts y validar el JWT para el tutorial.

    Campo
    Valor

    Nombre

    Introduce charts-jwt-tutorial.

    Proveedor

    Seleccione Custom JSON Web Token.

    Algoritmo de firma

    Seleccione HS256.

    Clave de firma

    Introduce topsecret.

  3. Haga clic en Save.

Si ya tienes una aplicación donde mostrar tu gráfica, está todo listo. Si no es así, continúa con los pasos restantes.

MongoDB ofrece una muestra preconstruida que te muestra cómo usar el SDK de Embedded Charts para autenticar una gráfica integrada usando un JWT.

Clona el repositorio de GitHub y sigue las instrucciones del archivo Readme para comenzar a utilizar la aplicación. Puedes personalizarlo para utilizar la gráfica que creaste anteriormente.

1

Advertencia

Genera JWTs del lado del servidor para proteger tus claves de firma de exposición.

El archivo app.js en la aplicación de muestra utiliza un simple servicio web y el paquete jsonwebtoken para generar y devolver un JWT firmado utilizando el algoritmo HS256 cuando un usuario inicia sesión en la aplicación con estas credenciales:

  • Nombre de usuario: admin

  • Contraseña: password

1const express = require("express");
2const bodyParser = require("body-parser");
3const cors = require("cors");
4const jwt = require("jsonwebtoken");
5const config = require("./config.js");
6
7const app = express();
8const port = 8000;
9
10// Configuring body parser middleware
11app.use(bodyParser.urlencoded({ extended: false }));
12app.use(bodyParser.json());
13app.use(cors());
14
15app.post("/login", (req, res) => {
16 const loginDetails = req.body;
17 // mock a check against the database
18 let mockedUsername = "admin";
19 let mockedPassword = "password";
20
21 if (
22 loginDetails &&
23 loginDetails.username === mockedUsername &&
24 loginDetails.password === mockedPassword
25 ) {
26 let token = jwt.sign({ username: loginDetails.username }, config.secret, {
27 expiresIn: "24h" // expires in 24 hours
28 });
29 res.json({ bearerToken: token });
30 } else {
31 res.status(401).send(false);
32 }
33});
34
35app.listen(port, () => console.log(`Example app listening on port ${port}!`));

Nota

Tu aplicación debe gestionar o emitir nuevos tokens antes de que expiren.

En la aplicación de muestra, la clave de firma topsecret está definida en un archivo en tu aplicación llamado config.js:

module.exports = {
secret: "topsecret"
};
2
  1. Cree un nuevo objeto de la clase ChartsEmbedSDK. Proporcione:

    • El valor de la propiedad baseUrl con la URL que apunta a tu instancia de Charts. Para insertar una de tus gráficas en la aplicación de muestra, reemplaza este valor por el :guilabel:Base URL del diálogo de Inserción de gráfica.

    • La propiedad chartId para especificar el identificador único de la gráfica que deseas incrustar. Para incrustar una de tus gráficas en la aplicación de muestra, sustituye este valor por :guilabel:Chart ID de tu cuadro de diálogo Insertar gráfica.

    • La propiedad getUserToken para especificar la función que genera y devuelve un JWT desde tu proveedor de autenticación.

    • Cualquier propiedad opcional que quieras proporcionar. Para obtener una lista de todas las propiedades que puede usar al incrustar gráficas mediante el SDK, consulte Referencia de opciones del SDK.

    En el archivo src/index.js de la aplicación de ejemplo, la función login en la propiedad getUserToken llama al servicio web que creaste para generar un JWT. Si el inicio de sesión tiene éxito, esa función retorna un JWT válido a la propiedad getUserToken.

    1import ChartsEmbedSDK from "@mongodb-js/charts-embed-dom";
    2import "regenerator-runtime/runtime";
    3
    4document
    5 .getElementById("loginButton")
    6 .addEventListener("click", async () => await tryLogin());
    7
    8function getUser() {
    9return document.getElementById("username").value;
    10}
    11
    12function getPass() {
    13return document.getElementById("password").value;
    14}
    15
    16async function tryLogin() {
    17if (await login(getUser(), getPass())) {
    18 document.body.classList.toggle("logged-in", true);
    19 await renderChart();
    20}
    21}
    22
    23async function login(username, password) {
    24const rawResponse = await fetch("http://localhost:8000/login", {
    25 method: "POST",
    26 headers: {
    27 Accept: "application/json",
    28 "Content-Type": "application/json"
    29 },
    30 body: JSON.stringify({ username: username, password: password })
    31});
    32const content = await rawResponse.json();
    33
    34return content.bearerToken;
    35}
    36
    37async function renderChart() {
    38const sdk = new ChartsEmbedSDK({
    39 baseUrl: "https://localhost/mongodb-charts-iwfxn", // ~REPLACE~ with the Base URL from your Embed Chart dialog
    40 chartId: "d98f67cf-374b-4823-a2a8-f86e9d480065", // ~REPLACE~ with the Chart ID from your Embed Chart dialog
    41 getUserToken: async function() {
    42 return await login(getUser(), getPass());
    43 }
    44});
  2. Por cada gráfica que quieras incrustar, invoca el método CreateChart del objeto que acabas de crear. Para incrustar una de tus gráficas en la aplicación de muestra, reemplaza el valor de la propiedad id con el :guilabel:Chart ID de tu cuadro de diálogo Embed gráfica.

    El siguiente ejemplo muestra una invocación del método CreateChart en el archivo src/index.js de la aplicación de ejemplo.

    const chart = sdk.createChart({ chartId: "d98f67cf-374b-4823-a2a8-f86e9d480065" }); // ~REPLACE~ with the Chart ID from your Embed Chart dialog
3

Utiliza el método render de tu objeto de gráfica para renderizarlo en tu aplicación.

El siguiente ejemplo muestra una invocación del método render en el archivo src/index.js de la aplicación de ejemplo.

chart.render(document.getElementById("chart"));
4

Charts renderiza la gráfica si puede validar el token que recibió con la solicitud para renderizar la gráfica. Si el token no es válido, Charts no renderiza la gráfica y muestra un código de error.

Para obtener más información sobre los códigos de error de integración de Charts, consulta Códigos de error integrados.

Volver

Utilizar autenticación de Google-Sign-In

En esta página