Перейти к содержанию

pta: Модуль аутентификации по периоду времени для NGINX

Установка на Debian/Ubuntu

Эти документы применимы к пакету APT nginx-module-pta, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-pta
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия    | Компонент   | Архитектуры   |
|-------------|-----------|-------------|----------------|
| debian      | bookworm  | main        | amd64, arm64   |
| debian      | trixie    | main        | amd64, arm64   |
| ubuntu      | focal     | main        | amd64, arm64   |
| ubuntu      | jammy     | main        | amd64, arm64   |
| ubuntu      | noble     | main        | amd64, arm64   |

Обзор

Модуль PTA (аутентификация по периоду времени) — это модуль для NGINX. С помощью PTA вы можете контролировать доступ к вашему контенту. PTA вычисляет зашифрованную строку запроса или параметр cookie, который включает время истечения и путь к содержимому.

Использование

Ниже приведён пример nginx.conf.

  worker_processes  1;

  events {
      worker_connections  1024;
  }


  http {
      include       mime.types;
      default_type  application/octet-stream;

      sendfile        on;

      keepalive_timeout  65;

      server {
          listen       80;
          server_name  localhost;

          pta_1st_key 0102030405060708090a0b0c0d0e0f00;
          pta_1st_iv  00000000000000000000000000000000;
          pta_2nd_key 11111111111111111111111111111111;
          pta_2nd_iv  22222222222222222222222222222222;

          location / {
              root   html;
              index  index.html index.htm;
          }

          location /foo/ {
              pta_enable on;
          }

          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          }
      }
  }

pta_1st_key

  • Синтаксис : pta_1st_key keystring
  • По умолчанию : -
  • Контекст : server

pta_1st_iv

  • Синтаксис : pta_1st_iv ivstring;
  • По умолчанию : -
  • Контекст : server

pta_2nd_key

  • Синтаксис : pta_2nd_key keystring;
  • По умолчанию : -
  • Контекст : server

pta_2nd_iv

  • Синтаксис : pta_2nd_iv ivstring;
  • По умолчанию : -
  • Контекст : server

pta_enable

  • Синтаксис : pta_enable on | off;
  • По умолчанию : pta_enable off;
  • Контекст : location

pta_auth_method

  • Синтаксис : pta_auth_method qs | cookie | qs cookie;
  • По умолчанию : pta_auth_method qs;
  • Контекст : location

Как это работает

Модуль PTA расшифровывает строку запроса или параметр cookie, начиная с `pta=...' и проверяет CRC32, время истечения и запрашиваемый URI-путь, встроенные в него. Поэтому вам нужно сгенерировать токен PTA и добавить его в ссылку в качестве строки запроса или параметра cookie. В каталоге samples есть некоторый код для генерации PTA.

формат

Этот байтовый поток зашифрован с помощью шифрования AES в режиме CBC 128 бит.

  +---------------+-------------------------+----------+-----------------+
  | CRC32 (4byte) | Время истечения (8byte) | URI Path | Дополнения       |
  |               | формат Unix Time        |          | формат pkcs #7   |
  +---------------+-------------------------+----------+-----------------+

CRC32

Это формат Big Endian. Вычисляется из времени истечения и URI Path. Эта часть используется для проверки того, что расшифровка AES действительна.

Время истечения

Это формат Big Endian. Сравнивается с моментом поступления запроса, и если время меньше или равно времени истечения, содержащемуся в токене PTA, запрос разрешается.

URI Path

В основном он должен быть идентичен пути запрашиваемого контента.

Пример: http://example.com/index.html -> /index.html

Он должен начинаться со слэша `/'.

Символ аsterisk `*' означает подстановочный знак.

  • Символ `*' должен быть только один. Пример: /foo/*/bar/*.jpg не допускается.

  • Вы можете использовать символ `*' в любой части, такой как часть имени директории, имя файла или суффикс имени файла.

  • Если вы используете символ `*' в буквальном смысле, вы должны экранировать его обратным слэшем.

Директива pta_auth_method может указывать метод аутентификации. Вы можете выбрать тип строки запроса, cookie или оба в качестве метода.

В случае обоих методов сначала оценивается строка запроса, а затем выполняется проверка cookie, если параметр pta не включен в строку запроса. Когда параметр pta в строке запроса недействителен, аутентификация не проходит и не выполняется обратная проверка cookie. Только если в строке запроса отсутствует параметр pta, выполняется проверка cookie.