Я пытаюсь аутентифицировать RADIUS-запросы по RESTful API (предоставленному Заказчиком), используя rlm_rest.
Проблема, с которой я сталкиваюсь, заключается в том, что формат ответа JSON (REST API, предоставляемый Заказчиком), отличаетсяиз формата по умолчанию rlm_rest (указан в и т.д. / raddb / mods-enabled / rest ).
Конфигурация моего виртуального сервера, как показано ниже:
По умолчанию
authorize {
...
...
rest
if (ok) {
update control {
Auth-Type := rest
}
}
}
mods-enabled / rest
authorize {
uri = "https://3rd-party-API/auth"
method = 'post'
body = 'json'
chunk = 0
tls = ${..tls}
data = '{
"code": 1,
"identifier": %I,
"avps": {
"User-Name": ["%{User-Name}"],
"NAS-IP-Address": ["%{NAS-IP-Address}"],
"Called-Station-Id": ["%{Called-Station-Id}"],
"Calling-Station-Id": ["%{Calling-Station-Id}"],
"NAS-Identifier": ["%{NAS-Identifier}"]
}
}'
}
Результат
/ sbin / radiusd -Xxx
HTTP-код ответа
200
JSON Body
{
"code": "2",
"identifier": "91",
"avps": {
"Customer-Attributes": "Hello"
...
...
"Acct-Interim-Interval": "300"
}
}
Структура JSON отличается от примера, и xlat parse "code" "identifier" "avps"
И, конечно, xlat не находит атрибутов, совпадающих со словарем,в то время как он не может найти «avps» и не будет копать глубже.
Поэтому мне было интересно, есть ли в любом случае
- Определить структуру JSON ответа для xlat на синтаксический анализ
- Вставьте флаг "is_json" или "do_xlat" в JSON ("avps"), и надеюсь, что xlat будетзатем копайте глубже
- Сохраните JSON и выполните синтаксический анализ с exec / rlm_exec (используя JQ или любой другой инструмент bash / JSON)
Пожалуйста, сообщите, есть ли обходной путь.Спасибо!