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.
все это немного странно
Рассмотрим другой способ получения кода авторизации из внутренней БД 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)
см. также