認証トークンを取得する

トークンとは

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

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

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

JSON Web Token の詳細については、Fleet Engine の基本JSON Web Token をご覧ください。

クライアントはトークンをどのように取得しますか?

ドライバーまたはユーザーが適切な認可認証情報を使用してアプリにログインすると、そのデバイスから発行される更新では、適切な認可トークンを使用する必要があります。このトークンは、アプリの権限を Fleet Engine に通知します。

デベロッパーは、クライアントの実装で次の機能を提供する必要があります。

  • サーバーから JSON Web Token を取得します。
  • トークンを期限切れになるまで再利用し、トークンの更新を最小限に抑えます。
  • トークンの有効期限が切れたときにトークンを更新します。

AuthTokenFactory クラスが位置情報の更新時に認証トークンを生成する あります。SDK は、Fleet Engine に送信する更新情報とともにトークンをパッケージ化する必要があります。サーバーサイドの SDK を初期化する前にトークンを発行できます。

Fleet Engine サービスによって要求されるトークンの詳細については、JSON の発行をご覧ください。 Fleet Engine 用のウェブトークン

認可トークン取得ツールの例

AuthTokenFactory のスケルトン実装を次に示します。

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String vehicleServiceToken;  // initially null
  private long expiryTimeMs = 0;
  private String vehicleId;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    String vehicleId = requireNonNull(context.getVehicleId());

    if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
      // The token has expired, go get a new one.
      fetchNewToken(vehicleId);
    }

    return vehicleServiceToken;
  }

  private void fetchNewToken(String vehicleId) {
    String url = "https://yourauthserver.example/token/" + vehicleId;

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
      this.vehicleId = vehicleId;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

この実装では、組み込みの Java HTTP クライアントを使用して、承認サーバーから JSON 形式のトークンを取得します。クライアントがトークンを保存する トークンを再取得し、古いトークンがトークンの発行から 10 分以内 あります。

実装によって、バックグラウンド スレッドの使用など、異なる処理が行われる場合があります。 トークンを更新します。

Fleet Engine で使用可能なクライアント ライブラリについては、以下をご覧ください。 スケジュール タスク サービス用のクライアント ライブラリ

次のステップ

Driver SDK を初期化する