認証トークンを取得する

トークンとは

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

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

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

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

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

ドライバまたはコンシューマが適切な API を使用してアプリにログインしたら、 そのデバイスから発行されるアップデートには、 適切な認可トークンが Fleet Engine と通信し、 付与します。

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

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

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

Fleet Engine サービスで想定されるトークンの詳細については、Fleet Engine のJSON Web Token の発行をご覧ください。

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

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 を初期化する