JavaScript フリート トラッキング ライブラリを設定する

JavaScript フリート トラッキング ライブラリを使用する前に、Fleet Engine に精通し、設定済みであることを確認してください。詳細については、Fleet Engine をご覧ください。

このドキュメントでは、ウェブページ アプリと Fleet Engine 間の認可を有効にする方法について説明します。Fleet Engine へのリクエストが適切な認可トークンで設定されたら、地図上で車両を追跡できるようになります。

認可を設定する

信頼性の低い環境からの API メソッド呼び出しの場合、Fleet Engine では、適切なサービス アカウントによって署名された JSON Web Token(JWT)を使用する必要があります。信頼性の低い環境には、スマートフォンやブラウザが含まれます。JWT の送信元は、完全に信頼できる環境であるサーバーです。JWT は署名、暗号化され、期限切れになるか無効になるまで、後続のサーバー操作のためにクライアントに渡されます。

バックエンドでは、標準のアプリケーションのデフォルト認証情報のメカニズムを使用して、Fleet Engine に対する認証と認可を行う必要があります。適切なサービス アカウントで署名された JWT を使用してください。サービス アカウントのロールの一覧については、Fleet Engine の基本Fleet Engine サービス アカウントのロールをご覧ください。

これに対して、バックエンドでは、標準のアプリケーションのデフォルト認証情報のメカニズムを使用して Fleet Engine に対する認証と認可を行う必要があります。

承認の仕組み

Fleet Engine データによる認可には、サーバー側とクライアント側の両方の実装が含まれます。

サーバーサイド認証

フリート トラッキング アプリケーションで認証と承認を設定する前に、バックエンド サーバーがフリート エンジンにアクセスするために、フリート トラッキング アプリケーションに JSON Web トークンを発行できる必要があります。フリート トラッキング アプリケーションは、これらの JWT をリクエストとともに送信します。これにより、Fleet Engine はリクエストが認証済みで、リクエスト内のデータにアクセスする権限があることを認識します。サーバーサイドの JWT 実装の手順については、Fleet Engine の基本JSON Web Token を発行するをご覧ください。

フリート トラッキングの実装時にサーバーからトークンを生成するには、以下をご覧ください。

クライアントサイド認証

JavaScript フリート トラッキング ライブラリを使用する場合、ライブラリは認可トークン フェッチャーを使用してサーバーにトークンをリクエストします。次のいずれかに該当する場合は、この処理が行われます。

  • 有効なトークンが存在しない場合(SDK が新しいページ読み込みでフェッチャーを呼び出していない場合や、フェッチャーがトークンで返していない場合など)。

  • トークンの有効期限が切れています。

  • トークンの有効期限が 1 分以内である。

それ以外の場合、JavaScript フリート トラッキング ライブラリは、以前に発行された有効なトークンを使用し、フェッチャーを呼び出しません。

認証トークン フェッチャーを作成する

次のガイドラインに従って認証トークン フェッチャーを作成します。

  • フェッチャーは、次のように Promise で囲まれた 2 つのフィールドを持つデータ構造を返す必要があります

    • 文字列 token

    • 数値 expiresInSeconds。トークンは取得後、ここで指定した時間が経過すると期限切れになります。認証トークン フェッチャーは、次の例に示すように、フェッチ時刻からライブラリに有効期限を秒単位で渡す必要があります。

  • フェッチャーは、サーバーの URL を呼び出してトークンを取得する必要があります。この URL(SERVER_TOKEN_URL)はバックエンドの実装によって異なります。次の URL の例は、GitHub のサンプルアプリ バックエンドのものです。

    • https://SERVER_URL/token/fleet_reader

例 - 認証トークン フェッチャーを作成する

次の例は、認可トークン取得ツールを作成する方法を示しています。

JavaScript

async function authTokenFetcher(options) {
  // options is a record containing two keys called
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.Token,
    expiresInSeconds: data.ExpiresInSeconds
  };
}

TypeScript

function authTokenFetcher(options: {
  serviceType: google.maps.journeySharing.FleetEngineServiceType,
  context: google.maps.journeySharing.AuthTokenContext,
}): Promise<google.maps.journeySharing.AuthToken> {
  // The developer should generate the correct
  // SERVER_TOKEN_URL based on options.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.token,
    expiresInSeconds: data.ExpiresInSeconds,
  };
}

次のステップ