2016-11-21 6 views
0

Я пытаюсь сделать интеграцию между клиентом sip и системой FS. Клиент SIP отправляет токен JWT в качестве пароля на этапе аутентификации.Freeswitch JWT Integration

Для аутентификации клиента FS создает запись в каталоге с полем пароля и сравнивает ее с паролем, полученным от клиента, в моем случае мне нужно переопределить это поведение, получив «токен», который отображается как пароль , проверив его и вернув ответ на FS о результате проверки, чтобы он знал, принимать или отклонять пользователя.

Я не уверен, как переопределить это поведение в FS без изменения исходного кода. Я бы предпочел написать плагины python или lua, чтобы справиться с этим.

Большое спасибо,

+0

Вы могли бы подробнее разработать полный рабочий процесс? Вы можете генерировать записи каталога FS «на лету» с помощью mod_xml_curl, и это будет содержать поле динамического пароля. Но это требует тестирования. Другим подходом было бы использование Kamailio в качестве регистратора SIP вместо FreeSWITCH. –

+0

Привет, у нас есть клиент, использующий библиотеку PJSIP и внутри структуры AuthCredInfo (поле данных) мы передаем токен JWT в FS.Нам нужно найти способ проверить токен вместо сравнения паролей, который выполняется с помощью стандартной процедуры. В основном мне нужно выполнить скрипт на имя пользователя/пароль и вернуть true или false в FS, чтобы он знал, разрешен ли пользователь или нет. –

+0

Я все еще считаю, что в этом случае камаилио будет лучше соответствовать регистратору SIP. Если есть бюджет, я буду рад помочь в разработке и создании POC для этого. Вы можете легко найти мой контакт, если это необходимо. –

ответ

1

Это кажется, что следующий раствор следует использовать.

Для того, чтобы FS работала с JWT для аутентификации, необходимо отправить JWT внутри пользовательского заголовка из пользовательского агента в FS. Также важно указать некоторый известный пароль для пользовательского агента.

Когда UA подключается к FS и динамически создает каталог с использованием сценария lua (xml-handler-script, xml-handler-bindings), можно проверить JWT и предоставить правильную запись каталога для пользователя просто прочитав поля настраиваемого заголовка.

Если JWT был действителен, тогда будет использоваться правильный пароль (известный), чтобы FS мог продолжить его, в противном случае будет предоставлен другой недействительный пароль, и FS отбросит соединение.

Надежда, что помогает кому-то,

+0

выглядит действительным, если у FS нет других способов узнать токен. Я думал, что маркер-маркер JWT и FS могут получить доступ к одному и тому же серверу и узнать о действительных токенах. –

+0

Спасибо Станислав. FS не знает об этом сервере, и он должен проверять клиента на основе подписанного токена и иметь дату истечения срока действия. Это делает процедуру намного быстрее, потому что она не требует поиска db для этого пользователя. –

0

Есть два параметра в FreeSWITCH:

  1. принять слепую-авторизацию: принимать любую проверку подлинности без фактических проверок (не хорошая черта для большинства людей)

    <param name="accept-blind-auth" value="true"/> 
    
  2. Auth-вызовы: пользователи в каталоге могут иметь «Auth-ACL» параметры применяются к ним таким образом, чтобы ограничить доступ пользователей к заранее определенному ACL или C IDR.

    <param name="auth-calls" value="$${internal_auth_calls}"/> 
    

    Значение может быть «ложным», чтобы отключить проверку подлинности на этом профиле, а это означает, что, когда вызовы поступают в профиле, не отправить вызов аутентификации вызывающей стороны.

уточните пожалуйста https://wiki.freeswitch.org/wiki/Sofia.conf.xml#auth-calls.

так что теперь вы можете позвонить своему сценарию lua по вызову и регистрации, которые фактически проверяют регистрацию, приглашают с помощью пользовательской логики. Теперь freeswitch не будет выполнять аутентификацию.

+0

Уважаемый Сурен, спасибо за ваш комментарий. Мне по-прежнему требуется передать JWT в FS внутри настраиваемого заголовка. Кажется, нет никакого способа обойти это. –

Смежные вопросы