Docs Menu
Docs Home
/
Atlas Charts
/ / /

カスタムJSON web tokenプロバイダーを使用した認証済みチャートの埋め込み

項目一覧

  • 前提条件
  • 手順
  • チャートの認証済み埋め込みの有効化
  • カスタム JWT プロバイダーを使用するための Charts の構成
  • チャートを表示するためのウェブアプリの作成
  • Node.js アプリのカスタマイズ

多くのウェブサイトでは、ログイン ユーザーを表すために JSON web tokenを生成する認証システムを使用しています。 ウェブサイトでJSON web tokenが生成される場合は、埋め込みチャートのレンダリングを許可するために既存のトークンを検証するようにChartsを構成できます。 あるいは、サイトで認証プロセスの一部としてJSON web tokenをまだ使用していない場合は、チャート レンダリングを認証するためにJSON web tokenを明示的に生成するコードを記述します。

このチュートリアルでは、後者のアプローチを示します。 この例では、ログイン ユーザー用の単純なJSON web tokenを生成し、 Chartsに送信する方法を示します。

Chartsは、埋め込みチャートをレンダリングするためのリクエストで受信したJSON web tokenを検証するようにプロバイダーを設定したときに提供した詳細を使用します。 トークンが無効であるか、提供した詳細に準拠していない場合、Charts は認証されたチャート ビューをレンダリングしません。

  • リンクされた Charts インスタンスの埋め込み認証プロバイダを構成するには、Atlas プロジェクト オーナーである必要があります。

  • 新しいダッシュボードの作成

  • チャートの作成

認証済み埋め込みを有効にして、Charts ベース URL とチャート ID を生成します。 ウェブページにチャートを表示するには、Charts base URL とチャート ID が必要です。

1

ダッシュボード ページから、埋め込みるグラフを含むダッシュボードを選択します。

2

ダッシュボードから次をクリックします:埋め込み情報にアクセスするには、チャートの右上にある を参照してください。 ドロップダウン メニューから Embed chartを選択します。

注意

埋め込みが有効になっているダッシュボード上のグラフは、 Embed Chartオプションが自動的に有効になります。 したがって、埋め込みが有効になっている ダッシュボード内のグラフに対してEmbed chartオプションを選択することはできません。

3

このチャートが使用するデータソースで外部共有をすでに有効にしている場合は、この手順をスキップします。 データソースへの埋め込みをまだ有効にしていない場合は、これで有効にできます。 Configure external sharingリンクをクリックします。

4
埋め込み認証チャート
クリックして拡大します
5
6

チャートを表示する各ユーザーに対して MongoDB フィルター ドキュメントを挿入する関数を指定できます。 これは、ユーザー固有のグラフをレンダリングするのに便利です。

次のフィルター関数は、ドキュメントの ownerIdフィールドが埋め込み認証プロバイダのトークンのsubフィールドの値と一致するデータのみをレンダリングします。

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

Tip

以下も参照してください。

ユーザーごとにフィルターを挿入する方法の詳細については、「ユーザー固有のフィルターを挿入 」を参照してください。

7

チャート ビューアがデータをフィルタリングできるフィールドを指定します。 デフォルトでは、フィールドは指定されていません。つまり、少なくとも 1 つのフィールドを明示的に許可するまでチャートをフィルタリングできません。

Tip

以下も参照してください。

フィルタ可能なフィールドの詳細については、「 フィルタ可能なフィールドの指定 」を参照してください。

8

これらの値をアプリケーション コードで 埋め込み認証プロバイダの属性 とともに使用して、チャートを埋め込みます。

注意

カスタムJSON web tokenプロバイダーを使用して認証を構成する場合は、署名アルゴリズムを選択できます。 このチュートリアルでは、HS256 署名アルゴリズムを使用します。 RS256 署名アルゴリズムを選択する場合は、次の署名キーのいずれかを選択することもできます。

  • JSON web key( JWK )または JSON ウェブ キー セット(JWKS)の URL: Charts は、指定された URL の JWK または JWKS ファイルからキーを検索します。次に、Charts はそのキーを使用して JSON web token を検証します。 ファイルに複数のキーがある場合、Charts は一致するまで各キーを試行します。

  • PEM 公開キー: Chartsは指定された公開キーを使用してJSON web tokenを検証します。

1

Atlas Charts がまだ表示されていない場合は、Atlas UI の [ Charts ] タブをクリックします。

Atlas がプロジェクトにリンクされた Charts のインスタンスを起動します。

2

サイドバーの [ Development ] 見出しの下の [ Embeddingをクリックします。

3

[Authentication Settings] タブをクリックします。

4
  1. Authentication providersセクションから [ Add ] をクリックします。

  2. Chartsチュートリアルの を検証するようにJSON web token を構成するには、次の値を指定します。

    フィールド
    名前
    charts-jwt-tutorialと入力します。
    プロバイダー
    Custom JSON Web Token を選択します。
    署名アルゴリズム
    HS256 を選択します。
    署名キー
    topsecretと入力します。
  3. [Save] をクリックします。

チャートを表示するアプリがすでに存在する場合は、すべて設定されています。 そうでない場合は、残りの手順に進みます。

MongoDBは事前に構築されたサンプルを提供しており、埋め込み SDK を使用してJSON web tokenを使用して埋め込みチャートを認証する方法を示しています。

リポジトリGithub のクローン アプリの使用を開始するには、 Readme ファイルの指示に従ってください。以前に作成したチャートを使用するようにカスタマイズできます。

1

警告

署名キーを露出から保護するために、サーバー側でJSON web token s を生成します。

サンプル アプリケーションの app.js ファイルは、ユーザーが次の認証情報でアプリケーションにログインするときに、単純な Web サービスと 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}!`));

注意

アプリケーションは、有効期限が切れる前に新しいトークンのリフレッシュまたは発行を処理する必要があります。

サンプル アプリケーションでは、署名キーtopsecretconfig.jsという名前のアプリケーション内のファイルに定義されています。

module.exports = {
secret: "topsecret"
};
2
  1. ChartsEmbedSDKクラスから新しいオブジェクトを作成します。 以下の情報を提供してください。

    • Charts インスタンスへの URL を持つbaseUrlプロパティの値。 サンプル アプリケーションにチャートの 1 つを埋め込むには、[ 埋め込みチャート ] ダイアログの、この値を :guideline: Base URLに置き換えます。

    • 埋め込みするチャートの一意の識別子を指定するためのchartIdプロパティ。 サンプル アプリケーションにチャートの 1 つを埋め込むには、[ 埋め込みチャート ] ダイアログの、この値を :guideline: Chart IDに置き換えます。

    • 認証プロバイダからJSON web tokenを生成して返す関数を指定する getUserToken プロパティ。

    • 指定するオプションのプロパティ。 SDK を使用してチャートを埋め込むときに使用できるすべてのプロパティのリストについては、 「 SDK オプション リファレンス」 を参照してください。

    サンプル アプリケーションの src/index.js ファイルでは、getUserToken プロパティの login 関数が作成した Web サービスを呼び出してJSON web tokenを生成します。 ログインが成功すると、その関数は有効なJSON web tokengetUserToken プロパティに返します。

    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メソッドを呼び出します。 To embed one of your charts in the sample application, replace the value of the id property with the :guilabel:Chart ID from your Embed Chart dialog.

    次の例では、サンプル アプリケーションの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 はグラフをレンダリングせず、エラー コードを表示します。

Charts 埋め込みエラーコードの詳細については、「埋め込みエラーコード 」を参照してください。

戻る

Atlas App Services で認証されたチャートの埋め込み