トークンとは
信頼性の低い環境からの API メソッド呼び出しの場合、Fleet Engine には 適切なサービス アカウントで署名された JSON Web Token(JWT)の使用。 信頼性の低い環境には、スマートフォンやブラウザが含まれます。JWT 完全に信頼できる環境であるサーバー上で行われます。JWT 署名、暗号化され、後続のサーバーのためにクライアントに渡されます。 インタラクションは、期限切れになるか無効になります。1 つの サービス アカウントのロールのリストについては、Fleet Engine サービス アカウントのロールをご覧ください。 「Fleet Engine Basics」をご覧ください。
対照的に、バックエンドは Fleet Engine に対して認証と認可を行う必要がある 標準のアプリケーションのデフォルト認証情報を使用 メカニズムです。
JSON Web Token の詳細については、JSON Web Token をご覧ください。 Fleet Engine Essentials。
クライアントはトークンをどのように取得しますか?
ドライバーまたはユーザーが適切な認可認証情報を使用してアプリにログインすると、そのデバイスから発行される更新では、適切な認可トークンを使用する必要があります。このトークンは、アプリの権限を Fleet Engine に通知します。
デベロッパーは、クライアントの実装で次の機能を提供する必要があります。
- サーバーから JSON ウェブトークンを取得します。
- トークンを期限切れになるまで再利用し、トークンの更新を最小限に抑えます。
- 期限切れになったらトークンを更新します。
AuthTokenFactory
クラスが位置情報の更新時に認証トークンを生成する
あります。SDK は更新とともにトークンをパッケージ化する必要がある
Fleet Engine に送信しますSDK を初期化する前に、サーバーサイドの実装でトークンを発行できることを確認します。
Fleet Engine サービスによって要求されるトークンの詳細については、Issue 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 で使用可能なクライアント ライブラリについては、以下をご覧ください。 スケジュール タスク サービス用のクライアント ライブラリ。