Skip to content

Yandex-tech/php-http-signature

Repository files navigation

Http Signature v10, PHP library

Draft RFC Http Signature v10

Библиотека реализует требования черновика RFC подписи HTTP-сообщений и предоставляет необходимые интерфейсы и базовые реализации.

tl;dr: см. /examples с примерами кода.

Зона ответственности библиотеки

  1. API криптографии.
    1. API для хэширования тела запроса.
    2. API для подписи запроса.
  2. API хранилища ключей для подписей.
  3. Заголовок Digest.
    1. Хэширование тела запроса для получения заголовка Digest.
  4. Заголовок Signature.
    1. Создание подписи HTTP-запроса.
    2. Проверка подписи HTTP-запроса.
    3. Парсинг и сборка RFC-совместимой строки подписи для заголовка Signature.
  5. Заголовок Authorization.
    1. Предоставление имени заголовка аутентификации и имени схемы аутентификации.

Требования

  • PHP 7.1+.
  • OpenSSL PHP Extension.
  • Psr\HttpMessage.

Описание компонентов

Digest

  • DigestAlgorithm — реализация конкретного алгоритма подписи тела запроса.
  • DigestAlgorithmFactory — фабрики для инстанцирования конкретной реализации алгоритма подписи.

HttpSignature

  • Clerk — компонент, инкапсулирующий логику подписи запроса и создания инстанса подписи.

  • Verifier — компонент, инкапсулирующий логику верификации подписи в запросе.

  • HeaderAccessor — компоненты для доступа к заголовкам запросов и ответов, откуда берутся данные для создания и проверки подписей. Позволяет инкапсулировать логику выборки псеведо-заголовоков вроде (request-target) из конкретных реализаций запросов и ответов.

  • Key — ключи для использования в подписи. Интерфейс не определяет детали использования, т.к. заранее неизвестно, какой будет использован алгоритм подписи. Ответственность за знание деталей реализации ключа лежит на конкретном алгоритме подписи.

  • KeyStorage — обёртка над хранилищем ключей. Не определяет формат хранения, только обязывает получить какой-то набор данных под ID ключа.

  • KeyLoader — превращает данные, загруженные из хранилища, в инстанс ключа. Может использоваться группа загрузчиков для случаев, когда ключи хранятся в разных форматах и/или используется множество видов ключей.

  • KeyProvider — инкапсулирует логику для выборки ключа по ID и парсинга его в инстанс конкретного ключа. По сути, упрощает работу с хранилищем и группой загрузчиков.

  • SignatureAlgorithm — реализация алгоритма подписи и проверки подписи. Работает со строками, а не инстансами Signature.

  • SignatureAlgorithmFactory — фабрики реализаций алгоритмов подписи. Позволяют по названию алгоритма (например, rsa-sha256) получить алгоритм подписи.

  • SignatureMarshaller — реализует перевод строки из заголовка Signature в инстанс подписи и обратно в соответствии с требованиями конкретной версии RFC.

  • SigningString — реализует перевод списка заголовков из HeaderAccessor в строку для подписи в соответствии с требованиями конкретной версии RFC.

About

PHP Implementation Of Draft RFC HttpSignature (v10)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages