Я работаю над интеграцией между 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
}
}
Это работает, хотя есть несколько проблем:
Можно ли отправить запрос 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, но он устарел.
Да, вы можете возвращать несколько атрибутов с разными списками, операторами и значениями, но расширение остальной строки этого не сделает, оно просто сбросит ответ сервера API в строку. Вам нужно вызвать модуль REST напрямую.
Да, вы можете позвонить в rlm_rest
модуль, как вы сказали. Расширение строки используется только в том случае, если вы хотите выполнить пост-обработку ответа сервера. Скажем, у вас есть собственный API, который не возвращал большой двоичный объект JSON в правильном формате, вы можете взять вывод остального расширения, пропустить его через карту JSON и таким образом извлечь данные ... По крайней мере, вы можете в v4.0.x, а не в v3.0.x.