অনুমোদন টোকেন পান

ভোক্তা SDK JSON ওয়েব টোকেন ব্যবহার করে অনুমোদন প্রদান করে। একটি JSON ওয়েব টোকেন (JWT) হল একটি অনুমোদন টোকেন যা একটি পরিষেবাতে এক বা একাধিক দাবি প্রদান করে।

উপভোক্তা SDK ফ্লিট ইঞ্জিনের সাথে যোগাযোগ করতে অ্যাপ্লিকেশন দ্বারা প্রদত্ত JSON ওয়েব টোকেন ব্যবহার করে। ফ্লিট ইঞ্জিন সার্ভার দ্বারা প্রত্যাশিত টোকেনগুলির বিশদ বিবরণের জন্য, JSON ওয়েব টোকেন এবং JSON ওয়েব টোকেন ইস্যু করুন দেখুন।

অনুমোদন টোকেন নিম্নলিখিত ফ্লিট ইঞ্জিন পরিষেবাগুলিতে অ্যাক্সেস প্রদান করে:

  • TripService - গাড়ির অবস্থান, রুট এবং ETA সহ ট্রিপের বিশদ বিবরণে গ্রাহক SDK অ্যাক্সেস দেয়। ট্রিপ পরিষেবার জন্য অনুমোদন টোকেন টোকেনের authorization শিরোনামে একটি tripid:TRIP_ID দাবি অন্তর্ভুক্ত করতে হবে, যেখানে TRIP_ID শেয়ার করা হচ্ছে অন-ডিমান্ড ট্রিপের ট্রিপ আইডি।

  • VehicleService - গাড়ির ঘনত্বের স্তর প্রদর্শন এবং পিকআপ পয়েন্ট ETA অনুমান করার জন্য গাড়ির আনুমানিক অবস্থান সম্পর্কে গ্রাহক SDK তথ্য দেয়। যেহেতু কনজিউমার SDK শুধুমাত্র আনুমানিক অবস্থানগুলি ব্যবহার করে, গাড়ি পরিষেবার জন্য অনুমোদনের টোকেনগুলির জন্য vehicleid দাবির প্রয়োজন হয় না৷

একটি টোকেন কি?

ফ্লিট ইঞ্জিনের জন্য নিম্ন-বিশ্বাসের পরিবেশ থেকে API পদ্ধতি কলের জন্য একটি উপযুক্ত পরিষেবা অ্যাকাউন্ট দ্বারা স্বাক্ষরিত JSON ওয়েব টোকেন (JWTs) ব্যবহার করা প্রয়োজন। কম-বিশ্বাসের পরিবেশে স্মার্টফোন এবং ব্রাউজার অন্তর্ভুক্ত। একটি JWT আপনার সার্ভারে উদ্ভূত হয়, যা একটি সম্পূর্ণ বিশ্বস্ত পরিবেশ । JWT স্বাক্ষরিত, এনক্রিপ্ট করা হয় এবং পরবর্তী সার্ভার ইন্টারঅ্যাকশনের জন্য ক্লায়েন্টের কাছে পাঠানো হয় যতক্ষণ না এটি মেয়াদ শেষ হয় বা আর বৈধ না হয়।

আপনার ব্যাকএন্ড মানক অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র প্রক্রিয়া ব্যবহার করে ফ্লিট ইঞ্জিনের বিরুদ্ধে প্রমাণীকরণ এবং অনুমোদন করা উচিত। একটি উপযুক্ত পরিষেবা অ্যাকাউন্ট দ্বারা স্বাক্ষরিত JWTs ব্যবহার করা নিশ্চিত করুন। পরিষেবা-অ্যাকাউন্ট ভূমিকাগুলির একটি তালিকার জন্য, ফ্লিট ইঞ্জিন বেসিকগুলিতে ফ্লিট ইঞ্জিন পরিষেবা অ্যাকাউন্টের ভূমিকা দেখুন৷

JSON ওয়েব টোকেন সম্পর্কে আরও তথ্যের জন্য, Fleet Engine Essentials-JSON ওয়েব টোকেন দেখুন।

কিভাবে ক্লায়েন্ট টোকেন পেতে?

একবার একজন ড্রাইভার বা ভোক্তা উপযুক্ত অনুমোদনের শংসাপত্র ব্যবহার করে আপনার অ্যাপে লগ ইন করলে, সেই ডিভাইস থেকে জারি করা যেকোনো আপডেটের জন্য অবশ্যই উপযুক্ত অনুমোদনের টোকেন ব্যবহার করতে হবে, যা ফ্লিট ইঞ্জিনকে অ্যাপের অনুমতির সাথে যোগাযোগ করে।

বিকাশকারী হিসাবে, আপনার ক্লায়েন্ট বাস্তবায়ন নিম্নলিখিতগুলি করার ক্ষমতা প্রদান করবে:

  • আপনার সার্ভার থেকে একটি JSON ওয়েব টোকেন আনুন।
  • টোকেন রিফ্রেশ কমাতে মেয়াদ শেষ না হওয়া পর্যন্ত টোকেনটি পুনরায় ব্যবহার করুন।
  • মেয়াদ শেষ হয়ে গেলে টোকেনটি রিফ্রেশ করুন।

AuthTokenFactory ক্লাস লোকেশন আপডেটের সময় অনুমোদন টোকেন তৈরি করে। SDK-কে ফ্লিট ইঞ্জিনে পাঠানোর জন্য আপডেট তথ্য সহ টোকেন প্যাকেজ করতে হবে। নিশ্চিত করুন যে আপনার সার্ভার-সাইড বাস্তবায়ন SDK শুরু করার আগে টোকেন ইস্যু করতে পারে।

ফ্লিট ইঞ্জিন পরিষেবা দ্বারা প্রত্যাশিত টোকেনগুলির বিশদ বিবরণের জন্য, ফ্লিট ইঞ্জিনের জন্য JSON ওয়েব টোকেন ইস্যু দেখুন৷

অনুমোদন টোকেন আনার উদাহরণ

নিম্নলিখিত কোড উদাহরণটি দেখায় কিভাবে একটি অনুমোদন টোকেন কলব্যাক বাস্তবায়ন করতে হয়।

জাভা

class JsonAuthTokenFactory implements AuthTokenFactory {

  private static final String TOKEN_URL =
      "https://yourauthserver.example/token";

  private static class CachedToken {
    String tokenValue;
    long expiryTimeMs;
    String tripId;
  }

  private CachedToken token;

  /*

*   This method is called on a background thread. Blocking is OK. However, be
*   aware that no information can be obtained from Fleet Engine until this
*   method returns.
*/
@Override
public String getToken(AuthTokenContext context) {
  // If there is no existing token or token has expired, go get a new one.
  String tripId = context.getTripId();
  if (tripId == null) {
    throw new RuntimeException("Trip ID is missing from AuthTokenContext");
  }
  if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
      !tripId.equals(token.tripId)) {
    token = fetchNewToken(tripId);
  }
  return token.tokenValue;
}

  private static CachedToken fetchNewToken(String tripId) {
    String url = TOKEN_URL + "/" + tripId;
    CachedToken token = new CachedToken();

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();

      token.tokenValue = obj.get("ServiceToken").getAsString();
      token.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 5 minutes from that time.
    */
    token.expiryTimeMs -= 5 * 60 * 1000;
  } catch (IOException e) {
    /*
    *   It's OK to throw exceptions here. The error listeners will receive the
    *   error thrown here.
    */
    throw new RuntimeException("Could not get auth token", e);
  }
  token.tripId = tripId;

    return token;
  }
}

কোটলিন

class JsonAuthTokenFactory : AuthTokenFactory() {

  private var token: CachedToken? = null

  /*

*   This method is called on a background thread. Blocking is OK. However, be
*   aware that no information can be obtained from Fleet Engine until this
*   method returns.
*/
override fun getToken(context: AuthTokenContext): String {
  // If there is no existing token or token has expired, go get a new one.
  val tripId =
    context.getTripId() ?:
      throw RuntimeException("Trip ID is missing from AuthTokenContext")

    if (token == null || System.currentTimeMillis() > token.expiryTimeMs ||
        tripId != token.tripId) {
      token = fetchNewToken(tripId)
    }

    return token.tokenValue
  }

  class CachedToken(
    var tokenValue: String? = "",
    var expiryTimeMs: Long = 0,
    var tripId: String? = "",
  )

  private companion object {
    const val TOKEN_URL = "https://yourauthserver.example/token"

    fun fetchNewToken(tripId: String) {
      val url = "$TOKEN_URL/$tripId"
      val token = CachedToken()

      try {
        val reader = InputStreamReader(URL(url).openStream())

        reader.use {
          val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()

          token.tokenValue = obj.get("ServiceToken").getAsString()
          token.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 5 minutes from that time.
        */
        token.expiryTimeMs -= 5 * 60 * 1000
      }
    } catch (e: IOException) {
      /*
            *   It's OK to throw exceptions here. The error listeners will receive the
            *   error thrown here.
      */
      throw RuntimeException("Could not get auth token", e)
    }

      token.tripId = tripId

      return token
    }
  }
}

এরপর কি

কনজিউমার SDK শুরু করুন