このドキュメントでは、ウェブ機能を有効にする際に JSON Web Token を発行する方法について説明します。 Fleet Engine データへのアクセスを制御できます。まだ確認していない場合は、Fleet Engine のセキュリティの JSON Web Token をご覧ください。Fleet Engine サービスでは、次のいずれかの方法で JWT を発行できます。
- 認証ライブラリを使用する - コードベースが Java で記述されている場合は、この方法を使用することをおすすめします。このライブラリは、サービス アカウントに対する JWT の発行を 必要なすべてのユースケース シナリオをカバーし、 実装を簡素化できます。
- 独自の JWT を作成する - Google の JWT ライブラリを使用できない場合は、独自のコードベースに JWT をビルドする必要があります。このセクションでは、 各シナリオでの JWT の例をご覧ください。
JWT の仕組み
モバイル スマートフォンやウェブブラウザなどの信頼できない環境では、バックエンド サーバーは次のように動作する JWT を発行します。
信頼性の低い環境で実行されているクライアント コードは、完全に信頼できる環境で実行されているサーバー コードを呼び出して、Fleet Engine に渡す適切な JWT をリクエストします。
JWT はサービス アカウントに関連付けられているため、リクエストは Fleet Engine に送信されます。 JWT に署名したサービス アカウントに暗黙的に関連付けられます。
JWT クレームは、クライアントが操作できるリソースをさらに制限します。 たとえば、特定の車両、ルート、タスクなどです。
Java の認可ライブラリを使用する
Java 用の Fleet Engine 認可ライブラリを使用するには、GitHub リポジトリをご覧ください。ライブラリは Fleet Engine の構築を簡素化する JWT で安全に署名します。次の機能を提供します。
- プロジェクトの依存関係の宣言
- オンデマンドルートまたはサービス アカウントのロールの一覧 スケジュール設定されたタスク
- 次のような認証情報ファイル以外のトークン署名メカニズム サービス アカウントの権限借用
- 署名付きトークンを gRPC スタブまたは Google API Codegen(GAPIC)クライアント ライブラリ
- 署名者を Fleet Engine クライアント ライブラリと統合する手順
コードから JWT を発行する場合
Java 用認可ライブラリを使用できない場合は、独自のコードベースに JWT を実装する必要があります。このセクションでは、独自のトークンを作成するためのガイドラインをいくつか示します。Fleet Engine のセキュリティ セクションの JSON Web Token をご覧ください。 をご覧ください。サービス アカウント Fleet Engine で使用されるサービス アカウントのロール。詳しくは、 次のセクションでは、オンデマンドルートまたは スケジュール設定されたタスクです。
一般的なガイドライン
- 適切なサービス アカウントとロールを使用する。サービス アカウントと
関連付けられているロールにより、トークンをリクエストしたユーザーは
トークンでアクセス権が付与されている情報を表示できます。詳細は以下のとおりです。
- モバイル デバイスに渡す JWT に署名する場合は、このサービスを使用します。 ロールが必要です。そうしないと、モバイル デバイスがアクセスすべきでないデータにアクセスしたり、変更したりする可能性があります。
- 特権呼び出しに使用する JWT に署名する場合は、ADC または JWT を使用するときに、適切な Fleet Engine 管理者ロールを持つサービス アカウントを使用します。それ以外の場合、オペレーションは失敗します。
- 作成したトークンのみを共有します。リソースへのアクセスに使用する認証情報は トークンを作成します。
- gRPC 呼び出しの場合、トークンを接続するメカニズムは
フレームワークを使用します。リソースを指定するメカニズムは、
Authorization
ヘッダーと署名なしヘッダーを含める方法があります。 このトークンの値はトークンです。 - 有効期限を返します。サーバーは、トークンの有効期限を返す必要があります(通常は秒単位)。
- トークン署名者として JSON を直接作成して署名する必要がある場合: アクセス トークンを使用する場合は、サービス OAuth を使用しないアカウント認証を、 デベロッパー向けドキュメント
オンデマンドの賃走の場合
- JWT ペイロードを作成するときに、認証セクションに追加のクレームを追加し、キー
vehicleid
またはtripid
を、呼び出しが行われる車両 ID またはルート ID の値に設定します。
スケジュール設定されたタスクの場合
- サーバーが他の API を呼び出す場合、トークンには
適切な申し立てを行います。そのためには、次の操作を行います。
- 各キーの値を
*
に設定します。 - このユーザーに、すべての
taskids
とdeliveryvehicleids
へのアクセスを許可します。これを行うには、認可セクションにキーtaskid
とdeliveryvehicleid
を使用して追加のクレームを追加します。 taskids
クレームでアスタリスク(*
)を使用する場合は、アスタリスクが配列内の唯一の要素である必要があります。
- 各キーの値を
オンデマンド賃走の JWT の例
このセクションでは、オンデマンド 設定しました。
ドライバアプリ オペレーションのトークンの例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "driver_12345"
}
}
コンシューマ アプリ オペレーション用のトークンの例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"tripid": "trip_54321"
}
}
スケジュール設定されたタスクの JWT の例
このセクションでは、スケジュール設定された一般的なシナリオでの JWT の例について説明します。 できます。
ドライバアプリのトークンの例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "driver_12345"
}
}
コンシューマ アプリのトークンの例
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"trackingid": "shipment_12345"
}
}
フリート オペレーションの JWT の例
このセクションでは、フリート オペレーションの一般的なシナリオの JWT の例を示します。
フリート内のすべてのタスクと車両を追跡するトークンの例
次の例は、すべてのタスクと車両を追跡するトークンです。 ウェブベースのアプリから利用できます必要な権限 クライアント アプリケーションより高くなります。詳しくは、 クライアントサイドの JavaScript フリート トラッキング ライブラリを設定します。 次のような実装が用意されています。
Fleet Engine Delivery Fleet Reader
Cloud IAM を使用してトークンに署名する なります。
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
"sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"scope": "https://www.googleapis.com/auth/xapi",
"authorization": {
"taskid": "*",
"deliveryvehicleid": "*",
}
}
バックエンド サーバー オペレーションの代替認証方法
Google では、ADC を使用してバックエンド サーバーの操作を認証することをおすすめしています。条件 ADC を使用できず JWT を使用する必要がある場合は、こちらの例をご覧ください。
オンデマンド バックエンド サーバー オペレーション用のトークンの例
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } { "iss": "provider@yourgcpproject.iam.gserviceaccount.com", "sub": "provider@yourgcpproject.iam.gserviceaccount.com", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "vehicleid": "*", "tripid": "*" } }
スケジュールされたバックエンド サーバー オペレーションのトークンの例
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "provider@yourgcpproject.iam.gserviceaccount.com", "sub": "provider@yourgcpproject.iam.gserviceaccount.com", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "taskid": "*" } }
スケジュールされたバックエンド サーバーのタスクの一括作成オペレーションのトークンの例
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "provider@yourgcpproject.iam.gserviceaccount.com", "sub": "provider@yourgcpproject.iam.gserviceaccount.com", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "taskids": ["*"] } }
スケジュールされたバックエンド サーバーの配送車両ごとのオペレーションのトークンの例
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "provider@yourgcpproject.iam.gserviceaccount.com", "sub": "provider@yourgcpproject.iam.gserviceaccount.com", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "deliveryvehicleid": "*" } }