Docs Menu
Docs Home
/ /

Incruste un gráfico autenticado mediante un proveedor JWT personalizado

Muchos sitios web utilizan sistemas de autenticación que generan JWTpara representar a un usuario conectado. Si su sitio web genera JWT,puede configurar Charts para validar los tokens existentes y autorizar la representación de gráficos incrustados. Como alternativa, si su sitio web aún no utiliza JWTcomo parte del proceso de autenticación, puede escribir código para generar JWTexplícitamente con el fin de autorizar la representación de gráficos.

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

Charts utiliza la información que proporcionaste al configurar un proveedor para validar los JWTque recibe con las solicitudes para renderizar gráficos incrustados. Si el token no es válido o no se ajusta a la información que proporcionaste, Charts no renderiza la vista del gráfico autenticado.

  • Debes ser un Atlas El propietario del proyecto debe configurar proveedores de autenticación de incrustación para su instancia de Charts vinculada.

  • Crear un nuevo panel de control

  • Crear un gráfico

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 Dashboards En la página , seleccione el panel que contiene el gráfico que desea incrustar. Para obtener instrucciones sobre cómo acceder a los paneles, consulte Paneles.

2

Desde el panel, haga clic en la esquina superior derecha del gráfico para acceder a su información de incrustación. Seleccione Embed chart en el menú desplegable.

Nota

Si un gráfico está en un panel con la función de incrustación habilitada, la opción Embed Chart se habilita automáticamente. Por lo tanto, no se puede seleccionar la opción Embed chart para gráficos en paneles con la función de incrustación habilitada.

3

Si ya ha habilitado el uso compartido externo en la fuente de datos que usa este gráfico, omita este paso. Si aún no ha habilitado la incrustación en la fuente de datos, puede hacerlo ahora. Haga clic en el enlace Configure external sharing.

4
Incrustar gráfico autenticado
haga clic para ampliar
5
6

Puede especificar una función para inyectar un documento de filtro de MongoDB para cada usuario que visualice el gráfico. Esto resulta útil para representar gráficos específicos del usuario.

Ejemplo

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

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

Tip

Para obtener más información sobre cómo inyectar filtros por usuario, consulte Inyectar filtros específicos del usuario.

7

Especifique los campos en los que los visores de gráficos pueden filtrar datos. De forma predeterminada, no se especifica ningún campo, lo que significa que el gráfico no se puede filtrar hasta que se permita explícitamente al menos un campo.

Tip

Para obtener más información sobre los campos filtrables, 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

Al configurar la autenticación con un proveedor JWT personalizado, puede elegir el algoritmo de firma. Este tutorial utiliza el algoritmo de firma HS256. Si selecciona el algoritmo de firma RS256, también puede elegir una de las siguientes claves de firma:

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

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

1

Si Atlas Charts aún no se muestra, haga clic en Visualization debajo del encabezado Services en la barra lateral de la interfaz de usuario de Atlas.

Atlas lanza una instancia de Gráficos vinculados a su proyecto.

2

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

Se muestra la página Visualizaciones integradas.

3

Nota

Debe ser el propietario del proyecto para acceder a la Authentication Settings página. Como usuario no administrador, puede usar gráficos incrustados, pero debe obtener una clave del 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, haga clic en Add.

  2. Proporcione los siguientes valores para configurar los gráficos para validar el JWT para el tutorial.

    Campo
    Valor

    Nombre

    Introduzca charts-jwt-tutorial.

    Proveedor

    Seleccione Custom JSON Web Token.

    Algoritmo de firma

    Seleccione HS256.

    Clave de firma

    Introduzca topsecret.

  3. Haga clic en Save.

Si ya tienes una aplicación para mostrar tu gráfico, ya está todo listo. Si no, 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 Léame para empezar a usar la aplicación. Puedes personalizarla para usar el gráfico que creaste anteriormente.

1

Advertencia

Genere JWTdel lado del servidor para proteger sus claves de firma contra la exposición.

El app.js archivo en la aplicación de muestra utiliza un servicio web simple y el jsonwebtoken paquete para generar y devolver un JWT firmado mediante el HS256 algoritmo 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

Su aplicación debe gestionar la actualización o emisión de nuevos tokens antes de que caduquen.

En la aplicación de muestra, la clave de firma topsecret se define en un archivo en su aplicación llamado config.js:

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

    • El valor de la propiedad baseUrl con la URL que apunta a su instancia de Gráficos. Para incrustar uno de sus gráficos en la aplicación de ejemplo, reemplace este valor con :guilabel:Base URL en el cuadro de diálogo "Incrustar gráfico".

    • La propiedad chartId especifica el identificador único del gráfico que desea incrustar. Para incrustar uno de sus gráficos en la aplicación de ejemplo, reemplace este valor con :guilabel:Chart ID en el cuadro de diálogo "Incrustar gráfico".

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

    • Cualquier propiedad opcional que desee proporcionar. Para obtener una lista de todas las propiedades que puede usar al incrustar gráficos con el SDK, consulte la 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. Para cada gráfico que desee incrustar, invoque el método CreateChart del objeto que acaba de crear. Para incrustar uno de sus gráficos en la aplicación de ejemplo, sustituya el valor de la propiedad id por :guilabel:Chart ID en el cuadro de diálogo "Incrustar gráfico".

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

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

Utilice el método render de su objeto gráfico para representarlo en su aplicación.

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

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

Charts renderiza el gráfico si puede validar el token recibido con la solicitud. Si el token no es válido, Charts no lo renderiza y muestra un código de error.

Para obtener más información sobre los códigos de error de incrustación de gráficos, consulte Códigos de error incrustados.

Volver

Utilice la autenticación de inicio de sesión de Google

En esta página