รับโทเค็นการให้สิทธิ์

โทเค็นคืออะไร

สำหรับการเรียกเมธอด API จากสภาพแวดล้อมที่มีความน่าเชื่อถือต่ำ Fleet Engine จะต้องใช้ การใช้ JSON Web Token (JWT) ที่ลงนามโดยบัญชีบริการที่เหมาะสม สภาพแวดล้อมที่มีความน่าเชื่อถือต่ำรวมถึงสมาร์ทโฟนและเบราว์เซอร์ต่างๆ JWT จะทำงานในเซิร์ฟเวอร์ของคุณ ซึ่งเป็นสภาพแวดล้อมที่เชื่อถือได้อย่างสมบูรณ์ JWT ได้รับการรับรอง เข้ารหัส และส่งไปยังไคลเอ็นต์สำหรับการโต้ตอบกับเซิร์ฟเวอร์ในภายหลังจนกว่าจะหมดอายุหรือไม่ถูกต้องอีกต่อไป

แบ็กเอนด์ของคุณควรตรวจสอบสิทธิ์และให้สิทธิ์กับ Fleet Engine โดยใช้ กลไก Application Default Credentials แบบมาตรฐาน สร้าง อย่าลืมใช้ JWT ที่ลงชื่อโดยบัญชีบริการที่เหมาะสม สำหรับ รายการของบทบาทบัญชีบริการ โปรดดูบทบาทบัญชีบริการ Fleet Engine ในข้อมูลพื้นฐานเกี่ยวกับ Fleet Engine

ในทางกลับกัน แบ็กเอนด์ของคุณควรตรวจสอบสิทธิ์และให้สิทธิ์กับ Fleet Engine โดยใช้ Application Default Credentials แบบมาตรฐาน และกลไกต่างๆ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ JSON Web Token โปรดดู JSON Web Token ใน Fleet Engine Essentials

ลูกค้าจะได้รับโทเค็นอย่างไร

เมื่อคนขับหรือผู้บริโภคเข้าสู่ระบบแอปโดยใช้ข้อมูลเข้าสู่ระบบการให้สิทธิ์ที่เหมาะสม การอัปเดตที่ดำเนินการจากอุปกรณ์ดังกล่าวต้องใช้โทเค็นการให้สิทธิ์ที่เหมาะสม ซึ่งจะสื่อสารสิทธิ์สำหรับแอปกับ Fleet Engine

ในฐานะนักพัฒนาซอฟต์แวร์ การใช้งานของไคลเอ็นต์ของคุณควรจะช่วยให้คุณ ดังต่อไปนี้

  • เรียก JSON Web Token จากเซิร์ฟเวอร์ของคุณ
  • ใช้โทเค็นซ้ำจนกว่าจะหมดอายุเพื่อลดการรีเฟรชโทเค็น
  • รีเฟรชโทเค็นเมื่อหมดอายุ

คลาส AuthTokenFactory จะสร้างโทเค็นการให้สิทธิ์ ณ เวลาอัปเดตตำแหน่ง SDK ต้องสร้างแพ็กเกจโทเค็นที่มีการอัปเดต เพื่อส่งไปยัง Fleet Engine ตรวจสอบว่าการติดตั้งใช้งานฝั่งเซิร์ฟเวอร์สามารถออกโทเค็นได้ก่อนที่จะเริ่มต้น SDK

โปรดดูรายละเอียดโทเค็นที่บริการ Fleet Engine คาดไว้ที่หัวข้อปัญหา JSON Web Token สำหรับ 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);
    }
  }
}

การใช้งานนี้ใช้ไคลเอ็นต์ HTTP ของ Java ในตัวเพื่อดึงข้อมูลโทเค็นในรูปแบบ JSON จากเซิร์ฟเวอร์การให้สิทธิ์ โดยไคลเอ็นต์จะบันทึกโทเค็นไว้เพื่อใช้ซ้ำและดึงข้อมูลโทเค็นอีกครั้งหากโทเค็นเก่าอยู่ภายใน 10 นาทีก่อนหมดอายุ

การใช้งานของคุณอาจดำเนินการต่างออกไป เช่น การใช้ชุดข้อความในเบื้องหลัง เพื่อรีเฟรชโทเค็น

ดูไลบรารีของไคลเอ็นต์ที่พร้อมใช้งานสำหรับ Fleet Engine ได้ที่ไลบรารีของไคลเอ็นต์สำหรับบริการการเดินทางแบบออนดีมานด์

ขั้นตอนถัดไป

เริ่มต้น Driver SDK