JavaScript フリート トラッキング ライブラリを使用する前に、Fleet Engine に精通していることと、Fleet Engine が設定されていることを確認してください。詳細については、Fleet Engine をご覧ください。
このドキュメントでは、ウェブページ アプリと Fleet Engine 間の認可を有効にする方法について説明します。Fleet Engine へのリクエストが適切な認可トークンで設定されたら、地図上で車両を追跡できるようになります。
認可を設定する
Fleet Engine では、信頼性の低い環境(スマートフォンやブラウザ)からの API メソッド呼び出しに JSON Web Token(JWT)を使用する必要があります。
JWT はサーバー上で生成され、署名、暗号化され、期限切れになるか無効になるまで、その後のサーバー インタラクションのためにクライアントに渡されます。
主な詳細
- アプリケーションのデフォルト認証情報を使用して、Fleet Engine に対する認証と承認を行います。
- 適切なサービス アカウントを使用して JWT に署名します。Fleet Engine の基本で、Fleet Engine サービス アカウントのロールをご覧ください。
認可の仕組み
Fleet Engine データによる認証には、サーバーサイドとクライアントサイドの両方の実装が含まれます。
サーバーサイド認可
フリート トラッキング アプリケーションで認証と承認を設定する前に、バックエンド サーバーがフリート エンジンにアクセスするために、フリート トラッキング アプリケーションに JSON Web トークンを発行できる必要があります。フリート トラッキング アプリケーションは、これらの JWT をリクエストとともに送信します。これにより、Fleet Engine はリクエストが認証済みで、リクエスト内のデータにアクセスする権限があることを認識します。サーバーサイドの JWT 実装の手順については、Fleet Engine の基本の JSON Web Token を発行するをご覧ください。
フリート トラッキングを実装する際にサーバーからトークンを生成するには、以下をご覧ください。- オンデマンド ルートおよびスケジュール設定されたタスクの両方のセクションを含む、JSON Web Token の発行に関する一般的なガイドライン
- オンデマンド ルート: バックエンド サーバー オペレーションのトークンの例
- スケジュール設定されたタスク: フリート内のすべてのタスクと車両を追跡するトークンの例
クライアントサイドの認可
JavaScript フリート トラッキング ライブラリを使用すると、認可トークン取得ツールを使用してサーバーからトークンがリクエストされます。次のいずれかに該当する場合は、この処理が行われます。
有効なトークンが存在しない(SDK が新しいページの読み込みで取得ツールを呼び出していない場合や、取得ツールがトークンを返さなかった場合など)。
トークンの有効期限が切れています。
トークンの有効期限が 1 分以内である。
それ以外の場合、JavaScript フリート トラッキング ライブラリは、以前に発行された有効なトークンを使用し、フェッチャーを呼び出しません。
認証トークン取得ツールを作成する
以下のガイドラインに沿って、認可トークン取得ツールを作成します。
フェッチャーは、2 つのフィールドを含むデータ構造を返す必要があります。次のように
Promise
でラップします。文字列
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,
};
}