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