Skip to content

tokenization-service

Хранилище карточных данных. Принимает карту, кладёт её в зашифрованном виде и возвращает токен — случайный идентификатор, по которому дальше и живёт вся система. Он же отдаёт данные обратно, когда карту нужно передать в банк. Благодаря этому сервису номер карты видят только он сам и PCI-шлюз, а остальные сервисы работают с токенами.

Токен обратим: детокенизация — не аварийная возможность, а штатная часть платёжного флоу. «Токенизация» здесь означает, что данные вынесены в одно защищённое место, а не что их нельзя восстановить.

Стек: Node.js, TypeScript, NestJS.

Чего не делает

Не разговаривает с мерчантом: наружу сервис не смотрит, все запросы приходят от наших сервисов. Не решает, кому можно отдавать карту: проверяется только подпись запроса, а не то, зачем спрашивают. Не знает ничего о транзакциях, статусах и банках — он оперирует картой, а не платежом. Не хранит CVV постоянно: код проверки живёт только внутри временной сессии и исчезает вместе с ней.

Входы

  • Токенизация от PCI-шлюза: одна карта, список карт пакетом или карта вместе с сессией. На одну и ту же карту сервис всегда возвращает один и тот же токен — он ищет уже существующую запись по хэшу, прежде чем заводить новую.
  • Создание временной сессии: строка с полными данными карты, которую нужно подержать ограниченное время. Срок жизни задаёт вызывающий, но сверху он ограничен настройкой сервиса.
  • Детокенизация от ядра и драйверов: вернуть карту по токену, вернуть содержимое сессии или отдать безопасно замаскированный номер, когда нужен только вид карты, а не сама карта.
  • Поиск токена по номеру карты — без создания нового: так проверяют, знакома ли нам эта карта.

Каждый запрос подписывается ключом KMS, а в теле обязателен штамп времени: если он расходится с текущим больше чем на несколько секунд, запрос отклоняется. Это защищает от повторной отправки перехваченного запроса.

Выходы

Наружу сервис не ходит: он отвечает вызывающему и обращается только к AWS KMS — за шифрованием, расшифровкой, вычислением хэша карты и проверкой подписи входящего запроса.

Хранилища

PostgreSQL хранит постоянные токены. В записи лежат сам токен, зашифрованные данные карты и хэш, по которому находится дубликат; ключ шифрования — в KMS, в базе его нет, поэтому одной только копии базы для восстановления карт мало.

Redis хранит временные сессии: значение точно так же зашифровано, а срок жизни ограничен — в платёжном флоу это около часа. Именно поэтому сессия годится для CVV, а постоянный токен — нет.

Участвует во флоу

Где искать

Внутренняя база знаний. Нашли неточность — поправьте страницу или заведите вопрос в разделе «Открытые вопросы».