[{"content":"Настройка ntfy Первым делом создаем отдельного пользователя для Authentik и генерируем токен для авторизации:\n1 2 3 4 ntfy user add authentik # вводим пароль и подтверждение ntfy token add authentik ntfy выведет токен в виде tk_*****, который понадобится в дальнейшем.\nДля уведомлений будем использовать тему ntfy с названием auth. Добавляем нашему пользователю права на запись в эту тему:\n1 ntfy access authentik auth write Настройка Authentik Переходим в интерфейс администратора и в разделе Events -\u0026gt; Notification Transports, создаем новый транспорт:\nName: ntfy Send once: включено Mode: Webhook (generic) Webhook URL: см. ниже Webhook Body Mapping: пока оставляем пустым, заполним позже Webhook Header Mapping: пусто Webhook URL Для примера будем использовать https://ntfy.example.com как адрес ntfy. Тогда в Webhook URL пишем: https://ntfy.example.com?auth=. После auth= нужно дописать токен ntfy, закодированный в base64, но без символов =. Готовим токен командой:\n1 echo -n \u0026#34;Bearer tk_*****\u0026#34; | base64 -w0 | tr -d \u0026#39;=\u0026#39; и добавляем в URL.\nОбратите внимание: в URL тема ntfy не указывается.\nWebhook Body Mapping Здесь придётся использовать немного магии: с помощью кода на Python, сформируем JSON, который будет отправляться в ntfy.\nСоздаем новый Property Mapping в разделе Customization -\u0026gt; Property Mappings:\nType: Webhook Mapping Name: ntfy Expression: пишем следующий код: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 topic = \u0026#34;auth\u0026#34; # Сюда подставьте название темы в ntfy title = \u0026#34;\u0026#34; message = \u0026#34;\u0026#34; priority = 3 tags = [] try: if notification.event.action == \u0026#34;login_failed\u0026#34;: # Если тип события - неудачный логин, # собираем данные о входе и формируем уведомление user = notification.event.user[\u0026#34;username\u0026#34;] ip = notification.event.client_ip country = notification.event.context[\u0026#34;geo\u0026#34;][\u0026#34;country\u0026#34;] city = notification.event.context[\u0026#34;geo\u0026#34;][\u0026#34;city\u0026#34;] user_agent = notification.event.context[\u0026#34;http_request\u0026#34;][\u0026#34;user_agent\u0026#34;] title = \u0026#34;Неудачная попытка входа\u0026#34; message = ( f\u0026#34;Кто-то попытался войти под именем {user}\\n\u0026#34; f\u0026#34;С IP адреса {ip} ({city}, {country})\\n\u0026#34; f\u0026#34;User agent: {user_agent}\u0026#34; ) priority = 4 tags = [\u0026#34;ninja\u0026#34;] else: # Для остальных событий: # в заголовке уведомления пишем тип события # в теле - выводим все доступные данные в \u0026#34;сыром\u0026#34; виде title = notification.event.action message = str(notification.event) except Exception as e: # Эта часть выполнится в случае ошибок в коде выше # и запишет ошибку в тело уведомления title = \u0026#34;Произошла ошибка\u0026#34; message = repr(e) priority = 5 tags = [\u0026#34;no_entry\u0026#34;] # Отдаем данные для отправки в ntfy return { \u0026#34;topic\u0026#34;: topic, \u0026#34;title\u0026#34;: title, \u0026#34;message\u0026#34;: message, \u0026#34;priority\u0026#34;: priority, \u0026#34;tags\u0026#34;: tags } Не забудьте поменять название темы ntfy в переменной topic. В примере указана тема auth.\nЕсли планируете добавить обработку других типов событий, поля структуры notification.event можно подсмотреть в логах Authentik, раздел Events -\u0026gt; Logs. Выберете нужное событие и в столбце Actions нажмите кнопку Show details.\nВозвращаемся в Events -\u0026gt; Notification Transports, редактируем транспорт ntfy и выбираем только что созданный Property Mapping (ntfy) в поле Webhook Body Mapping.\nОсталось указать, при каких событиях посылать уведомления.\nNotification Rules Переходим в раздел Events -\u0026gt; Notification Rules и создаем новое правило:\nName: ntfy notifications Group: authentik Admins Transports: добавляем ntfy в столбец Selected Transports Severity: любая (для ntfy приоритет уведомления определяется в Python коде) Нажимаем Create.\nТеперь укажем политики, при которых будет срабатывать наше правило. Раскрываем ntfy notifications и нажимаем Create and bind Policy:\nType: Event Matcher Policy Name: любое имя Action: выбираем тип события (например, Login Failed срабатывает при неудачных попытках входа) Остальные поля не трогаем Созданные политики можно посмотреть и отредактировать в разделе Customization -\u0026gt; Policies.\nНа этом - всё. Подпишитесь на выбранную тему в ntfy, если ещё этого не сделали, и попробуйте ввести неправильный пароль при входе в Authentik. Подписчикам темы придет уведомление о неудачной попытке входа.\nПолезные ссылки Authentik - Event actions - возможные значения переменной notification.event.action с пояснениями ntfy - Publish as JSON - структура JSON, используемая ntfy ","permalink":"https://www.kray74.ru/posts/ntfy-authentik/","summary":"Инструкция по настройке authentik для отправки уведомлений в ntfy","title":"Используем ntfy для уведомлений от Authentik"}]