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

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

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

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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ 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);
    }
  }
}

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

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

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

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

เริ่มต้น Driver SDK