토큰이란 무엇인가요?
Fleet Engine은 신뢰도가 낮은 환경(스마트폰 및 브라우저)에서 API 메서드를 호출할 때 JSON 웹 토큰(JWT)을 사용해야 합니다.
JWT는 서버에서 시작되고 서명 및 암호화되며 만료되거나 더 이상 유효하지 않을 때까지 후속 서버 상호작용을 위해 클라이언트에 전달됩니다.
주요 세부정보
- 애플리케이션 기본 사용자 인증 정보를 사용하여 Fleet Engine에 인증하고 승인합니다.
- 적절한 서비스 계정을 사용하여 JWT에 서명합니다. Fleet Engine 기본사항의 Fleet Engine 서비스 계정 역할을 참고하세요.
JSON 웹 토큰에 관한 자세한 내용은 Fleet Engine 필수사항의 JSON 웹 토큰을 참고하세요.
클라이언트는 토큰을 어떻게 가져오나요?
운전자 또는 소비자가 적절한 승인 사용자 인증 정보를 사용하여 앱에 로그인하면 해당 기기에서 실행되는 모든 업데이트는 적절한 승인 토큰을 사용해야 하며, 이 토큰은 앱의 권한을 Fleet Engine에 전달합니다.
개발자는 클라이언트 구현에서 다음을 수행할 수 있는 기능을 제공해야 합니다.
- 서버에서 JSON 웹 토큰을 가져옵니다.
- 토큰이 만료될 때까지 재사용하여 토큰 새로고침을 최소화합니다.
- 토큰이 만료되면 새로고침합니다.
AuthTokenFactory 클래스는 위치 업데이트 시 승인 토큰을 생성합니다. SDK는 Fleet Engine에 전송할 업데이트 정보와 함께 토큰을 패키징해야 합니다. SDK를 초기화하기 전에 서버 측 구현에서 토큰을 발급할 수 있는지 확인합니다.
Fleet Engine 서비스에 필요한 토큰에 관한 자세한 내용은 Fleet Engine의 JSON 웹 토큰 발급을 참고하세요.
승인 토큰 가져오기 도구의 예
다음은 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에 사용할 수 있는 클라이언트 라이브러리는 예약된 작업 서비스용 클라이언트 라이브러리를 참고하세요.