승인 토큰 가져오기

토큰이란 무엇인가요?

신뢰도가 낮은 환경에서 API 메서드 호출 시 Fleet Engine에 적절한 서비스 계정으로 서명된 JSON 웹 토큰 (JWT) 사용 신뢰도가 낮은 환경에는 스마트폰과 브라우저가 포함됩니다. JWT는 완전히 신뢰할 수 있는 환경인 서버에서 시작됩니다. JWT 서명되고 암호화되어 후속 서버를 위해 클라이언트에 전달됩니다. 만료되거나 더 이상 유효하지 않을 때까지 상호작용하지 않습니다.

백엔드는 다음을 사용하여 Fleet Engine에 대해 인증 및 승인해야 합니다. 표준 애플리케이션 기본 사용자 인증 정보 메커니즘을 사용합니다. 적절한 서비스 계정으로 서명된 JWT를 사용해야 합니다. 서비스 계정 역할 목록은 Fleet Engine 서비스 계정 역할 참조 Fleet Engine 기본사항 참고

반대로 백엔드는 Fleet Engine에 대해 인증 및 승인해야 합니다. 표준 애플리케이션 기본 사용자 인증 정보 사용 메커니즘을 제공합니다

JSON 웹 토큰에 관한 자세한 내용은 Fleet Engine 기본사항JSON 웹 토큰을 참고하세요.

클라이언트는 토큰을 어떻게 가져오나요?

운전자나 소비자가 적절한 앱을 사용해 앱에 로그인하면 인증 사용자 인증 정보를 갖추고 있으므로 해당 기기에서 발급되는 모든 업데이트는 적절한 승인 토큰이 있어야 합니다. 권한을 부여할 수 있습니다.

개발자는 클라이언트 구현에서 다음을 실행할 수 있는 기능을 제공해야 합니다.

  • 서버에서 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에 사용할 수 있는 클라이언트 라이브러리는 다음을 참조하세요. 주문형 여행 서비스를 위한 클라이언트 라이브러리.

다음 단계

Driver SDK 초기화