Docs Menu
Docs Home
/
Atlas Charts
/ / /

사용자 지정 JSON web token 제공자를 사용하여 인증된 차트 임베드

이 페이지의 내용

  • 전제 조건
  • 절차
  • 차트에 인증된 임베딩 활성화
  • 사용자 지정 JSON web token 제공자를 사용하도록 Charts 구성하기
  • 차트를 표시하는 웹 앱 만들기
  • Node.js 앱 사용자 지정

많은 웹사이트에서 로그인한 사용자를 나타내기 위해 개의JSON web token를 생성하는 인증 시스템을 사용합니다. 웹사이트에서 JSON web token를 생성하는 경우, 임베딩된 Atlas Charts의 렌더링을 승인하기 위해 기존 토큰의 유효성을 검사하도록 Charts를 구성할 수 있습니다. 또는 사이트에서 아직 JSON web token를 인증 프로세스의 일부로 사용하지 않는 경우 차트 렌더링에 권한을 부여할 목적으로 JSON web token를 명시적으로 생성하는 코드를 작성할 수 있습니다.

이 튜토리얼에서는 후자의 접근 방식을 보여줍니다. 이 예제에서는 로그인한 사용자에 대한 간단한 JSON web token 를 생성하여 Charts로 보내는 방법을 보여 줍니다.

Charts는 포함된 차트를 렌더링하라는 요청과 함께 수신한 JWT의 유효성을 검사하도록 제공자를 구성할 때 제공한 세부 정보를 사용합니다. 토큰이 유효하지 않거나 제공한 세부 정보와 일치하지 않는 경우 Charts는 인증된 차트 뷰를 렌더링하지 않습니다.

  • 연결된 인스턴스에 대한 임베딩 인증 제공자를 Atlas 구성하려면 프로젝트 소유자 Charts 여야 합니다.

  • 새 대시보드 생성하기

  • 차트 만들기

인증된 임베딩을 활성화하여 Atlas Charts 기본 URL과 차트 ID를 생성합니다. 웹 페이지에 차트를 표시하려면 차트 기본 URL과 차트 ID가 필요합니다.

1

대시보드 페이지에서 임베드하려는 차트가 포함된 대시보드를 선택합니다.

2

대시보드에서 다음을 클릭합니다. 을(를) 클릭하여 임베딩 정보에 액세스합니다. 드롭다운 메뉴에서 Embed chart 를 선택합니다.

참고

임베딩이 활성화된 대시보드에 차트가 있는 경우 Embed Chart 옵션이 자동으로 활성화됩니다. 따라서 임베딩이 활성화된 대시보드 내의 차트에 대해서는 Embed chart 옵션을 선택할 수 없습니다.

3

If you have already enabled external sharing on the data source this chart uses, skip this step. 아직 데이터 소스에서 임베딩을 활성화하지 않은 경우 지금 활성화할 수 있습니다. Configure external sharing 링크를 클릭합니다.

4
인증 차트 임베드
클릭하여 확대
5
6

차트를 보는 각 사용자에게 MongoDB 필터 문서를 삽입하는 함수를 지정할 수 있습니다. 이는 사용자별 Atlas Charts를 렌더링할 때 유용합니다.

예시

다음 필터 함수는 문서의 ownerId 필드가 임베딩 인증 제공자의 토큰의 sub 필드 값과 일치하는 데이터만 렌더링합니다.

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

다음도 참조하세요.

사용자별 필터를 삽입하는 방법에 대해 자세히 알아보려면 사용자별 필터 삽입을 참조하세요.

7

차트 뷰어에서 데이터를 필터링할 수 있는 필드를 지정합니다. 기본적으로 필드는 지정되지 않으므로, 하나 이상의 필드를 명시적으로 허용할 때까지 차트를 필터링할 수 없습니다.

다음도 참조하세요.

필터링 가능한 필드에 대해 자세히 알아보려면 필터링 가능한 필드 지정을 참조하세요.

8

애플리케이션 코드에서 이러한 값을 내장된 인증 제공자 속성과 함께 사용하여 차트를 임베드하세요.

참고

사용자 지정 JSON web token 제공자를 사용하여 인증을 구성할 때 서명 알고리즘을 선택할 수 있습니다. 이 튜토리얼에서는 HS256 서명 알고리즘을 사용합니다. RS256 서명 알고리즘을 선택하는 경우 다음 서명 키 중 하나를 선택할 수도 있습니다.

1

Atlas Charts가 아직 표시되지 않은 경우 Atlas UI에서 Charts 탭을 클릭합니다.

Atlas가 프로젝트에 연결된 Charts의 인스턴스를 시작합니다.

2

사이드바의 Development 제목 아래에 있는 Embedding 을 클릭합니다.

임베딩 페이지가 표시됩니다.

3

참고

Authentication Settings 페이지에 액세스 하려면 프로젝트 소유자 여야 합니다. 관리자가 아닌 사용자는 포함된 차트를 계속 사용할 수 있지만 프로젝트 소유자로부터 키를 받아야 합니다.

Authentication Settings 탭을 클릭합니다.

인증 설정 탭 이 표시됩니다.

4
  1. Authentication providers 섹션에서 Add 을 클릭합니다.

  2. 다음 값을 Charts 입력하여 튜토리얼에 대한 JSON 웹 토큰 의 유효성을 검사하도록 를 구성합니다.

    필드
    이름
    charts-jwt-tutorial을(를) 입력합니다.
    제공자
    Custom JSON Web Token0}을 선택합니다.
    서명 알고리즘
    HS2560}을 선택합니다.
    서명 키
    topsecret을(를) 입력합니다.
  3. Save를 클릭합니다.

차트를 표시할 앱이 이미 있는 경우 모든 준비가 된 것입니다. 그렇지 않은 경우 나머지 단계를 진행합니다.

MongoDB는 임베딩 SDK를 사용하여 JSON web token 를 사용하여 임베딩된 차트를 인증하는 방법을 보여주는 사전 구축된 샘플을 제공합니다.

리포지토리 복제 그리고 Readme Github 파일 의 지침에 따라 앱 사용을 시작합니다. 이전에 만든 차트 를 사용하도록 사용자 지정할 수 있습니다.

1

경고

서명 키가 노출되지 않도록 서버 측에서 JWT를 생성합니다.

app.js 샘플 jsonwebtoken 애플리케이션의 파일은 HS256 사용자가 이러한 자격 증명으로 애플리케이션에 로그인할 때 간단한 웹 서비스와 패키지를 사용하여 알고리즘을 사용하여 서명된 JSON web token 를 생성하고 반환합니다.

  • 사용자 이름: admin

  • 비밀번호: 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}!`));

참고

귀하의 애플리케이션은 토큰이 만료되기 전에 새로고침 또는 새 토큰 발행을 처리해야 합니다.

샘플 애플리케이션에서 서명 키 topsecret 는 애플리케이션의 config.js 파일에 정의되어 있습니다.

module.exports = {
secret: "topsecret"
};
2
  1. ChartsEmbedSDK 클래스에서 새 객체를 만듭니다. 다음을 제공합니다.

    • Charts 인스턴스를 가리키는 URL이 포함된 baseUrl 속성 값입니다. 샘플 애플리케이션에 차트 중 하나를 포함하려면 차트 포함 대화 상자에서 이 값을 :guilabel:Base URL 으로 바꾸세요.

    • chartId 속성을 사용하여 삽입하려는 차트의 고유 식별자를 지정합니다. 샘플 애플리케이션에 Atlas Charts 중 하나를 포함하려면 Atlas Charts 포함 대화 상자에서 이 값을 :guilabel:Chart ID 으로 바꾸세요.

    • getUserToken 속성을 사용하여 인증 제공자로부터 JWT 를 생성하고 반환하는 함수를 지정합니다.

    • 제공하려는 모든 선택적 속성입니다. SDK를 사용하여 차트를 임베드할 때 사용할 수 있는 모든 속성 목록은 SDK 옵션 레퍼런스에서 확인하세요.

    샘플 애플리케이션의 src/index.js 파일에서 getUserToken 속성의 login 함수는 사용자가 생성한 웹 서비스를 호출하여 JSON web token 를 생성합니다. 로그인에 성공하면 해당 함수는 getUserToken 속성에 유효한 JSON web token 를 반환합니다.

    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. 포함하려는 각 차트에 대해 방금 생성한 객체의 CreateChart 메서드를 호출합니다. 샘플 애플리케이션에 Atlas Charts 중 하나를 포함하려면 차트 포함 대화 상자에서 id 속성의 값을 :guilabel:Chart ID 로 바꿉니다.

    다음 예제에서는 샘플 애플리케이션의 src/index.js 파일에서 CreateChart 메서드를 호출하는 방법을 보여 줍니다.

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

차트 객체의 render 메서드를 사용하여 애플리케이션에서 렌더링합니다.

다음 예제에서는 샘플 애플리케이션의 src/index.js 파일에서 render 메서드를 호출하는 방법을 보여 줍니다.

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

Charts는 차트 렌더링 요청과 함께 수신한 토큰의 유효성을 검사할 수 있는 경우 차트를 렌더링합니다. 토큰이 유효하지 않으면 Charts는 차트를 렌더링하지 않고 오류 코드를 표시합니다.

차트 임베딩 오류 코드에 대한 자세한 내용은 임베딩된 오류 코드를 참조하세요 .

돌아가기

Atlas App Services에서 인증된 차트 임베드