Свойства общего идентификатора поставщика Google

Фон

В этом документе описаны необходимые свойства общих идентификаторов, которые используются при интеграции между Google и поставщиком (или эмитентом учетной записи пользователя). Общий идентификатор можно рассматривать как непрозрачный указатель на границу между учетной записью Google и учетной записью эмитента.

Поэтому важно помнить, что общий идентификатор не относится ни к учетной записи Google (или пользователю, либо другому объекту в хранилище Google), ни к учетной записи поставщика/эмитента (или другому объекту). Это относится к связи между этими двумя.

Свойства общего идентификатора

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

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

  1. Будьте глобально уникальными: этот общий идентификатор должен указывать ровно на одну ссылку между пользователем Google и учетной записью эмитента. Для того же эмитента не должно быть другого общего идентификатора с тем же значением.
  2. Быть неугаданным: эти общие идентификаторы дают разрешение предпринимать действия от имени пользователя, поэтому важно, чтобы третья сторона не могла угадать значение общего идентификатора.
  3. Быть отзывным: важно, чтобы общий идентификатор мог быть отозван пользователем, и этот отзыв должен запрещать любое будущее использование значения общего идентификатора. Это свойство имеет несколько следующих свойств:
    • Не основано на неизменяемом свойстве какой-либо учетной записи: если значение общего идентификатора должно быть основано на неизменяемом свойстве учетной записи эмитента или учетной записи Google, то воссоздание отозванного общего идентификатора приведет к тому же значению этого общего идентификатора. идентификатор (тем самым отменяя отзыв), поэтому значение общего идентификатора не должно быть свойством учетной записи (например, не должно быть номером телефона или хэшем номера телефона).
    • Это не просто <Учетная запись Google, Партнерская учетная запись>: должно быть какое-то другое значение (например, время), чтобы разрешить отзыв.
  4. Разрешить несколько ссылок для учетной записи с обеих сторон. Важно, чтобы создание значения общего идентификатора не делало невозможным для одного пользователя Google ссылку на несколько банковских счетов или для нескольких учетных записей Google для связи с одним банковским счетом ( например, родительский и дочерний счета, которые оба связаны с банковским счетом родителя). Подобно отзыву, это имеет несколько следствий:
    • Опять же, не на основе неизменяемого свойства любой учетной записи: в противном случае общий идентификатор будет иметь одно и то же значение, когда один пользователь Google связывает несколько банковских счетов (если значение общего идентификатора основано на учетной записи Google) или если несколько учетных записей Google связаны с один банковский счет (если значение общего идентификатора основано на свойстве банковского счета)
  5. Быть долговечным: общий идентификатор действителен только в безопасном контексте (интеграция между Google и поставщиком, которая использует защиту как на уровне соединения, так и на уровне приложения (например, PGP, взаимный SSL и т. д.), поэтому он не Для обеспечения безопасности необходимы короткие жизненные циклы. Google предпочитает, чтобы общие идентификаторы никогда не истекали, но если поставщик требует истечения срока действия, это должен быть длительный период времени (например,> 1 год).

Другие рекомендуемые свойства общего идентификатора:

  1. Base64: это упрощает транспортировку и передачу данных при интеграции через https.
  2. Минимальная длина: рекомендуется минимум 27 цифр (до кодирования Base64), чтобы обеспечить достаточное адресное пространство и избежать коллизий.

Что может пойти не так?

Чтобы помочь читателю понять требуемые свойства, мы приводим несколько тематических исследований, иллюстрирующих проблемы, возникающие при несоблюдении этих свойств.

Практические примеры использования общих идентификаторов

Пример №1: Переработка телефонных номеров

Эмитент, который использовал номер телефона пользователя в качестве общего идентификатора. Когда пользователь А сменил тарифный план, он отказался от своего номера телефона и получил новый. Месяц спустя телефонная компания повторно использовала старый телефонный номер, и внезапно новый владелец телефонного номера, Пользователь Б, начал видеть обвинения в своем аккаунте за вещи, которые он не покупал.

Эмитент нарушил многие свойства общего идентификатора, в основном свойство №1. Такие вещи, как номера телефонов, могут мигрировать от пользователя к пользователю, поэтому они уникальны только в течение определенного снимка времени.

Пример № 2: Паста

Сотрудник Google или партнера случайно вставил в чат общий идентификатор вместо внутреннего инструмента. Дополнительные уровни защиты предотвращают злонамеренное использование общего идентификатора, но в целях безопасности Google хотел отозвать общий идентификатор и заменить его новым. Когда Google или партнер пытаются отозвать общий идентификатор, они обнаруживают, что общие идентификаторы — это всего лишь идентификатор учетной записи пользователя в системе эмитента, а общий идентификатор используется для непосредственного поиска учетной записи пользователя. Поэтому общий идентификатор нельзя было отозвать без удаления учетной записи пользователя и создания для него новой.

Пример №3: Плохой сотрудник

После описанного выше инцидента «Вставка» злоумышленник в Google/Partner понимает, что, поскольку общий идентификатор — это всего лишь идентификатор учетной записи пользователя, если им удастся поместить идентификатор чужой учетной записи в свое собственное значение общего идентификатора, они смогут совершать покупки за счет этого другого человека. Нарушение свойства № 2 сделало эту непреднамеренную вставку не просто дырой в безопасности для одного пользователя — это дыра в безопасности для каждого пользователя.

Пример № 4: Ротация

После описанного выше инцидента «Вставка» эмитент переключается на UUID в качестве общего формата идентификатора. На этот раз сотрудник эмитента по ошибке отправил по электронной почте некоторые общие идентификаторы в виде открытого текста в рамках отладочной электронной почты. Google говорит: не беспокойтесь, мы просто отзовем и заменим общие идентификаторы пользователя.

В рамках ротации Google сообщает эмитенту, что каждая скомпрометированная учетная запись пользователя будет иметь два общих идентификатора, активных в течение короткого периода времени, пока продолжается очистка базы данных. Но Эмитент не включил свойство № 4 и сообщает Google, что у них есть ограничение, согласно которому для конкретной учетной записи пользователя может быть активен только один общий идентификатор. Это приводит к очень запутанной ротации с условиями гонки.