このドキュメントでは、ウェブベースとモバイルベースのアプリが Fleet Engine データにアクセスできるようにする際の JSON Web Token の発行方法について説明します。この操作をまだ行っていない場合は、 Security in Fleet Engine の JSON Web Token をすでに読んでください。 できます。Fleet Engine サービスでは、いずれかの方法で JWT を発行できます。 できます。
- 認証ライブラリを使用する - コードベースが Java で記述されている場合は、この方法を使用することをおすすめします。このライブラリは、サービスで必要となるすべてのユースケース シナリオで JWT の発行を処理し、実装を大幅に簡素化します。
- 独自の JWT を作成する - Google の JWT ライブラリを使用できない場合は、 独自のコードベースに組み込むことができますこのセクションでは、 各シナリオでの JWT の例をご覧ください。
JWT の仕組み
スマートフォンやウェブブラウザなどの信頼できない環境では、 サーバーは、次のように機能する JWT を発行します。
信頼性の低い環境で実行されているクライアント コードがサーバー上で呼び出しを行う 適切な JWT をリクエストするために、完全に信頼できる環境で実行されるコード Fleet Engine に渡します
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 に署名する場合は、Driver SDK ロールまたは Consumer SDK ロールのサービス アカウントを使用します。それ以外の場合、 アクセスすべきでないデータが変更されたり、アクセスされたりする可能性があります。
- 特権呼び出しに使用する JWT に署名する場合は、ADC または JWT を使用するときに、適切な Fleet Engine 管理者ロールを持つサービス アカウントを使用します。それ以外の場合、オペレーションは失敗します。
- 作成したトークンのみを共有する。リソースへのアクセスに使用する認証情報は トークンを作成します。
- gRPC 呼び出しの場合、トークンを接続するメカニズムは、呼び出しに使用される言語とフレームワークによって異なります。リソースを指定するメカニズムは、
Authorization
ヘッダーと署名なしヘッダーを含める方法があります。 このトークンの値はトークンです。 - 有効期限を返します。サーバーは、有効期限内の 通常は秒単位です。
- トークン署名者として JSON を直接作成して署名する必要がある場合: アクセス トークンを使用する場合は、サービス OAuth を使用しないアカウント認証を、 デベロッパー向けドキュメント
オンデマンドの賃走の場合
- JWT ペイロードを作成するときに、認証セクションに追加のクレームを追加し、キー
vehicleid
またはtripid
を、呼び出しが行われる車両 ID またはルート ID の値に設定します。
スケジュール設定されたタスクの場合
- サーバーが他の API を呼び出す場合、トークンには適切なクレームも含まれている必要があります。そのためには、次の操作を行います。
<ph type="x-smartling-placeholder">
- </ph>
- 各キーの値を
*
に設定します。 - すべての
taskids
とdeliveryvehicleids
へのアクセス権をユーザーに付与します。これを行うには、認可セクションにキーtaskid
とdeliveryvehicleid
を使用して追加のクレームを追加します。 taskids
クレームでアスタリスク(*
)を使用する場合は、アスタリスクが配列内の唯一の要素である必要があります。
- 各キーの値を
オンデマンド賃走の JWT の例
このセクションでは、オンデマンド ルートを使用する一般的なシナリオの 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": "*",
}
}
バックエンド サーバー オペレーションの代替の認証方法
バックエンド サーバー オペレーションの認証には 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": "*" } }