Настройте библиотеку отслеживания автопарка JavaScript.

Перед использованием библиотеки JavaScript для отслеживания транспортных средств убедитесь, что вы знакомы с Fleet Engine и настроили его. Подробнее см. Fleet Engine .

В этом документе показано, как включить авторизацию между веб-приложением и Fleet Engine. После настройки запросов к Fleet Engine с правильными токенами авторизации вы сможете отслеживать транспортное средство на карте.

Настроить авторизацию

Fleet Engine требует использования JSON Web Tokens (JWT) для вызовов методов API из сред с низким уровнем доверия : смартфонов и браузеров.

JWT создается на вашем сервере, подписывается, шифруется и передается клиенту для последующих взаимодействий с сервером до тех пор, пока не истечет срок его действия или он не станет недействительным.

Ключевые детали

Как работает авторизация?

Авторизация с использованием данных Fleet Engine подразумевает реализацию как на стороне сервера, так и на стороне клиента.

Авторизация на стороне сервера

Перед настройкой аутентификации и авторизации в приложении для отслеживания автопарка ваш внутренний сервер должен иметь возможность выдавать JSON Web Tokens приложению для доступа к Fleet Engine. Ваше приложение отправляет эти JWT вместе со своими запросами, чтобы Fleet Engine распознавал запросы как аутентифицированные и авторизованные для доступа к данным в запросе. Инструкции по реализации JWT на стороне сервера см. в разделе «Выдача JSON Web Tokens» в разделе «Основные сведения о Fleet Engine» .

Чтобы сгенерировать токены на вашем сервере при реализации отслеживания автопарка, см. следующее:

Авторизация на стороне клиента

При использовании библиотеки отслеживания JavaScript Fleet она запрашивает токен с сервера, используя сборщик токенов авторизации. Это происходит при выполнении любого из следующих условий:

  • Действительный токен отсутствует, например, если SDK не вызвал сборщик при загрузке новой страницы или если сборщик не вернулся с токеном.

  • Срок действия токена истек.

  • Срок действия токена истекает через одну минуту.

В противном случае библиотека отслеживания JavaScript Fleet использует ранее выданный действительный токен и не вызывает сборщик.

Создать сборщик токенов авторизации

Создайте свой сборщик токенов авторизации, следуя этим рекомендациям:

  • Сборщик должен возвращать структуру данных с двумя полями , заключенную в Promise следующим образом:

    • Строковый token .

    • Число expiresInSeconds . Срок действия токена истекает через указанное время после получения. Сборщик токена аутентификации должен передать библиотеке время истечения срока действия в секундах с момента получения, как показано в примере.

  • Сборщик должен обратиться к URL-адресу на вашем сервере для получения токена. Этот URL — SERVER_TOKEN_URL — зависит от реализации вашего бэкенда. Следующий пример URL-адреса относится к бэкенду примера приложения на GitHub :

    • https://SERVER_URL/token/fleet_reader

Пример — создание сборщика токенов авторизации

В следующих примерах показано, как создать сборщик токенов авторизации:

JavaScript

async function authTokenFetcher(options) {
  // options is a record containing two keys called
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.Token,
    expiresInSeconds: data.ExpiresInSeconds
  };
}

Машинопись

function authTokenFetcher(options: {
  serviceType: google.maps.journeySharing.FleetEngineServiceType,
  context: google.maps.journeySharing.AuthTokenContext,
}): Promise<google.maps.journeySharing.AuthToken> {
  // The developer should generate the correct
  // SERVER_TOKEN_URL based on options.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.token,
    expiresInSeconds: data.ExpiresInSeconds,
  };
}

Что дальше?