JSON ウェブトークン

JSON ウェブトークン(JWT)は、クライアントとサーバー間の情報交換の認証と認可に使用されるオープン ウェブ標準です。アプリユーザーが適切なロールの認証情報で初めてログインすると、サーバーはエンコードされたデジタル署名付き JWT を作成して返します。この JWT は後続のリクエストで使用されます。このプロセスでは、ユーザーの認証と、アカウントのロールに基づくルート、サービス、リソースへのアクセス権の付与の両方が行われます。

Fleet Engine では、スマートフォンやブラウザなどの信頼度の低い環境からの API メソッド呼び出しに JSON Web Token(JWT)を使用する必要があります。

JWT はサーバーで生成され、署名と暗号化が行われてクライアントに渡されます。有効期限が切れるか無効になるまで、以降のサーバーとのやり取りで使用されます。

主な詳細

API キーとは異なり、JWT は有効期間が短く、ロールに実行権限が付与されているオペレーションのみに制限されます。JWT の詳細については、Wikipedia の JSON Web Token をご覧ください。アクセスロールの詳細については、このガイドのサービス アカウントのロールをご覧ください。

JWT 要素

JWT にはヘッダーとクレーム セクションが含まれます。ヘッダー セクションには、サービス アカウントから取得した秘密鍵や暗号化アルゴリズムなどの情報が含まれています。クレーム セクションには、JWT の作成時刻、有効期間、JWT がアクセスを要求するサービス、アクセスをスコープするその他の認可情報(配送車両 ID など)などの情報が含まれます。

次の表では、JWT フィールドの一般的な説明と、Fleet Engine Cloud プロジェクトでこれらのフィールドの値を見つけることができる場所に関する具体的な情報を示します。

JWT ヘッダー フィールド

フィールド

説明

alg

使用するアルゴリズム。`RS256`。

typ

トークンのタイプ。`JWT`。

子供

サービス アカウントの秘密鍵 ID。この値は、サービス アカウントの JSON ファイルの private_key_id フィールドで確認できます。適切なレベルの権限を持つサービス アカウントのキーを使用してください。

JWT クレーム フィールド

フィールド

説明

iss

サービス アカウントのメールアドレス。サービス アカウントの JSON ファイルの client_email フィールドにあります。

Pub/Subです

サービス アカウントのメールアドレス。サービス アカウントの JSON ファイルの client_email フィールドにあります。

AUD

サービス アカウントの SERVICE_NAME(この場合は https://fleetengine.googleapis.com/

iat

JWT が作成されたときのタイムスタンプ。00:00:00 UTC, January 1, 1970 からの経過秒数で指定します。スキューには 10 分かかります。タイムスタンプが過去または未来の方向に過剰に遠い時点のものである場合は、サーバーがエラーを報告する可能性があります。

exp

JWT の有効期限が切れるタイムスタンプ。00:00:00 UTC, January 1, 1970 からの経過秒数で指定します。タイムスタンプが 1 時間以上未来の場合、リクエストは失敗します。

authorization

ユースケースに応じて、deliveryvehicleidtrackingidtaskid、または taskids を含む場合があります。

taskids を指定する場合、認可スコープは次のいずれかの形式の配列にする必要があります。

"taskids": ["task_id_one","task_id_two"]

または

"taskids": ["*"]

Fleet Engine JWT クレーム

Fleet Engine はプライベート クレームを使用します。プライベート クレームを使用すると、承認されたクライアントのみが独自のデータにアクセスできるようになります。

たとえば、サーバーが運転手のモバイル デバイス用に JSON ウェブトークンを発行する場合、その運転手の車両 ID の値を含む vehicleid クレームまたは deliveryvehicleid クレームのいずれかを含める必要があります。次に、JWT は、ドライバーの役割に応じて、特定の車両 ID のみにアクセスを許可し、他の任意の車両 ID にはアクセスを許可しません。

Fleet Engine は次の非公開クレームを使用します。

オンデマンドのルート

  • vehicleid:
    • Driver SDK は、乗車中か車両のどちらで動作しているかにかかわらず、常にこのクレームを使用します。Fleet Engine バックエンドは、変更を行う前に、車両がリクエストされた乗車に関連付けられていることを確認します。
    • JWT は、必須でなくても、車両と乗車両方のオペレーションをカバーできます。これにより、JWT 署名の実装が簡素化される可能性があります。
  • tripid:
    • Consumer SDK は常にこのクレームを使用します。
    • JWT は、必須でなくても、車両と乗車中の両方のオペレーションをカバーできます。これにより、トークン署名の実装が簡素化される可能性があります。

スケジュール設定されたタスク

  • deliveryvehicleid

    配送車両ごとの API を呼び出すときに使用します。

  • taskid

    タスクごとの API を呼び出すときに使用します。

  • taskids

    BatchCreateTasksAPI を呼び出すときに使用します。このクレームは配列形式である必要があり、配列にはリクエストの完了に必要なすべてのタスク ID が含まれている必要があります。delivervehicleidtrackingidtaskid のクレームは含めないでください。

  • trackingid

    GetTaskTrackingInfoAPI を呼び出すときに使用します。申し立ては、リクエストのトラッキング ID と一致している必要があります。delivervehicleidtaskidtaskids のクレームは含めないでください。

次のステップ