Asterisk app: Authenticate

Приложение диалплана Asterisk: аутентификация пользователя.

Описание

Данное приложение требует от вызывающего абонента ввести пароль для продолжения выполнения диалплана.

Если пароль начинается со слэш '/', то символы интерпретируются как имя файла, который содержит пароль.
В файле может содержаться множество паролей, по одному в каждой новой строке.
При использовании ключа базы данных, значение соотнесенное с ключом может быть произвольным, оно не используется.
У пользователя есть три попытки ввода, прежде чем соединение будет разорвано.

Синтаксис

Authenticate(password[,options[,maxdigits[,prompt]]])

Аргументы
  • password - пароль известный пользователю.
параметры
  • a: Установить Account Code, как введенный пароль.
  • d: Определяет указанный путь, как ключ БД. Если family/key заданы в БД, как /pin/4888,

то в диалплане назначается /pin, в качестве пароля будет использован ключ - 4888, значение же пары family/key (в примере 1234) не важно:

exten => _7777,1,Answer()
exten => _7777,n,Authenticate(/pin,d,4,conf-getpin)
*CLI> database show pin
/pin/4888                                         : 1234
1 results found.

все это немного странно 8-o

Рассмотрим другой способ получения кода авторизации из внутренней БД Asterisk,
без использования опции d, привязанный к callerid вызывающего абонента.
Предположим в БД назначен <family/key> :<value> - pin/2666 :1234

*CLI> database show pin 2666
/pin/2666                                         : 1234

где 2666 номер абонента.

exten => s,1,Answer()
   same => n,Authenticate(${DB(pin/${CALLERID(num)})},,4,conf-getpin)
   same => n,playback(welcome)

функция ${DB(pin/${CALLERID(num)})} выдаст нам <value> для пары <pin/2666> в качестве кода авторизации:
Authenticate("PJSIP/fs_pjsip-000000de", "1234,,4,conf-getpin")

-- Executing [s@from-fs-pjsip:1] Goto("PJSIP/fs_pjsip-000000de", "from-test-2,s,1") in new stack
    -- Goto (from-test-2,4888,1)
    -- Executing [s@from-test-2:1] Answer("PJSIP/fs_pjsip-000000de", "") in new stack
    -- Executing [s@from-test-2:2] Authenticate("PJSIP/fs_pjsip-000000de", "1234,,4,conf-getpin") in new stack
    -- <PJSIP/fs_pjsip-000000de> Playing 'conf-getpin.gsm' (language 'en')
    -- <PJSIP/fs_pjsip-000000de> Playing 'auth-thankyou.gsm' (language 'en')
    -- Executing [s@from-test-2:3] Playback("PJSIP/fs_pjsip-000000de", "welcome") in new stack
    -- <PJSIP/fs_pjsip-000000de> Playing 'welcome.gsm' (language 'en')
    -- Auto fallthrough, channel 'PJSIP/fs_pjsip-000000de' status is 'UNKNOWN'
  • m: представляет указанный путь, как файл, содержащий список аккаунтов и хэш паролей, разделенные двоеточием ':'.

/var/spool/asterisk/pass (hash 1234 и 4321 соответственно)

   4888:81dc9bdb52d04dc20036dbd8313ed055
    :d93591bdf7860e1e4ee2fca799911215
exten => _7777,1,Answer()
exten => _7777,n,Authenticate(/var/spool/asterisk/pass,am,4,conf-getpin)
  • r: Удалить ключ БД. после успешного ввода (работает только с опцией 'd')
  • maxdigits: максимально допустимое количество знаков в пароле. Система перестает читать ввод данных после достижения порога.

В этом случае не требуется ввод решетки '#' в конце. По умолчанию '0' - без ограничений, система ожидает ввода решетки '#' в конце.

  • prompt: файл голосового сообщения.
exten => _1,1,Authenticate(1234,,4,conf-getpin)
exten => _1,n,Set(CDR(userfield)=conference776/${CALLERID(num)})
exten => _1,n,ConfBridge(776)

см. также

Asterisk app: BackGround

Команда Asterisk Dial

Asterisk app: Read

Asterisk app: SendDTMF

Asterisk app: WaitExten

Команды диалплана Asterisk

  • asterisk/app/authenticate.txt
  • Последние изменения: 2018/03/12