Прежде чем использовать библиотеку отслеживания автопарка JavaScript, убедитесь, что вы знакомы с Fleet Engine и настроили его. Подробнее о Fleet Engine…
В этом документе рассказывается, как включить авторизацию между приложением веб-страницы и Fleet Engine. После того как вы настроите запросы к Fleet Engine с правильными токенами авторизации, вы сможете отслеживать автомобиль на карте.
Как настроить авторизацию
Для вызовов методов API из незащищенных сред, таких как смартфоны и браузеры, Fleet Engine требует использовать токены JWT.
JWT создается на вашем сервере, подписывается, шифруется и передается клиенту для последующего взаимодействия с сервером, пока не истечет срок его действия или он не станет недействительным.
Важная информация
- Используйте Application Default Credentials для аутентификации и авторизации в Fleet Engine.
- Используйте подходящий сервисный аккаунт для подписи JWT. Подробнее о ролях сервисного аккаунта Fleet Engine рассказывается в разделе Основы Fleet Engine.
Как работает авторизация?
Для авторизации с использованием данных Fleet Engine требуется реализовать как серверную, так и клиентскую часть.
Авторизация на стороне сервера
Прежде чем настраивать аутентификацию и авторизацию в приложении для отслеживания автопарка, убедитесь, что серверная часть может выдавать веб-токены JSON приложению для отслеживания автопарка для доступа к Fleet Engine. Ваше приложение для отслеживания автопарка отправляет эти JWT со своими запросами, чтобы Fleet Engine распознавал запросы как аутентифицированные и авторизованные для доступа к данным в запросе. Инструкции по реализации JWT на стороне сервера можно найти в разделе Выпуск веб-токенов JSON статьи Основы Fleet Engine.
Чтобы генерировать токены на сервере при реализации отслеживания автопарка, ознакомьтесь со следующими ресурсами:- Общие рекомендации по выпуску веб-токенов JSON, в том числе разделы для поездок по запросу и запланированных задач.
- Поездки по запросу: пример токена для операции на внутреннем сервере
- Запланированные задачи: пример токена для отслеживания всех задач и транспортных средств в автопарке
Клиентская авторизация
Когда вы используете библиотеку отслеживания Fleet Tracking для JavaScript, она запрашивает токен у сервера с помощью средства получения токена авторизации. Это происходит, если выполняется одно из следующих условий:
Нет действительного токена, например если SDK не вызвал загрузчик при загрузке страницы или если загрузчик не вернул токен.
Срок действия токена истек.
Срок действия токена истекает через минуту.
В противном случае библиотека отслеживания Fleet Tracking JavaScript использует ранее выданный действительный токен и не вызывает функцию получения.
Как создать средство получения токена авторизации
При создании сборщика токенов авторизации следуйте этим рекомендациям:
Извлекатель должен возвращать структуру данных с двумя полями, заключенную в тег
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
};
}
TypeScript
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,
};
}