Назад | Перейти на главную страницу

Расширение FreeRADIUS REST

Я работаю над интеграцией между FreeRADIUS 3.0.15 и сервером API в NodeJS, который будет обрабатывать учет, авторизацию и аутентификацию. Все это задокументировано (например, это репо это очень ценная отправная точка) и относительно проста.

Однако я также хочу использовать Динамические клиенты модуль, и пусть мой сервер API решает, разрешен ли клиент или нет. Я не смог найти никакой документации по этому поводу, кроме эта тема в списке рассылки FreeRADIUS, который содержит рабочий пример того, как разрешить удаленному API авторизовать клиента:

# /sites-available/dynamic-clients
server dynamic_clients {
    authorize {
        if ("%{rest: https://url?ipaddress='%{Packet-Src-IP-Address}'}") {
            update control {
                &FreeRADIUS-Client-IP-Address = "%{Packet-Src-IP-Address}"
                &FreeRADIUS-Client-Shortname = "%{rest: https://url?ipaddress='%{Packet-Src-IP-Address}'&return=shortname}"
                &FreeRADIUS-Client-Secret = "%{rest: https://url?ipaddress='%{Packet-Src-IP-Address}'}&return=secret"
            }

        }
        ok
    }
}

Это работает, хотя есть несколько проблем:

  1. Можно ли вызвать сервер только один раз, чтобы получить разные атрибуты? В цитированной выше ветке один из авторов предлагает "правильно форматируйте свои ответы"и ссылки на некоторые документы API, но я, честно говоря, не мог понять, что это значит.
  2. Можно ли отправить запрос POST с полезной нагрузкой JSON? Это не критично, но это легко сделать при настройке остального модуля, просто объявив раздел:

    # /mods-available/rest
    rest {
        # ... other sections
        authenticate {
            uri = "${..connect_uri}/radius/authenticate"
            method = 'post'
            body = 'json'
            data = '{ "username": "%{User-Name}", "password": "%{User-Password}" }'
        }
        ... other sections
    }
    

В этом отношении мне не хватает синтаксиса REST расширение, Я огляделась, но ничего не нашла (единственный страница документации Я нашел говорит, что нет доступного расширения).

Формат ответа JSON задокументирован в Raddb / доступные моды / отдых. Ссылка из списка рассылки, изначально связанная с якорем, также отображала тот же формат ответа JSON, но он устарел.

  1. Да, вы можете возвращать несколько атрибутов с разными списками, операторами и значениями, но расширение остальной строки этого не сделает, оно просто сбросит ответ сервера API в строку. Вам нужно вызвать модуль REST напрямую.

  2. Да, вы можете позвонить в rlm_rest модуль, как вы сказали. Расширение строки используется только в том случае, если вы хотите выполнить пост-обработку ответа сервера. Скажем, у вас есть собственный API, который не возвращал большой двоичный объект JSON в правильном формате, вы можете взять вывод остального расширения, пропустить его через карту JSON и таким образом извлечь данные ... По крайней мере, вы можете в v4.0.x, а не в v3.0.x.