FreeRADIUS REST 扩展

FreeRADIUS REST 扩展

我正在开发 FreeRADIUS 3.0.15 与 NodeJS 中的 API 服务器之间的集成,该服务器将处理记帐、授权和身份验证。所有这些都已记录在案(例如,这个仓库是一个非常有价值的起点)并且相对简单。

不过,我也想使用动态客户端模块,并让我的 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. 是否可以发送带有 JSON 有效负载的 POST 请求?这并不重要,但在配置其余模块时很容易做到,只需声明一个部分即可:

    # /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 的语法扩张,我环顾四周,什么也没找到(唯一的文档页面我发现说没有可用的扩展)。

答案1

JSON 响应格式记录在raddb/mods-可用/休息。邮件列表中的链接最初链接到一个锚点,该锚点也显示相同的 JSON 响应格式,但这些格式已经过时了。

  1. 是的,您可以返回多个属性,使用不同的列表、运算符和值,但 REST 字符串扩展不会这样做,它只会将 API 服务器的响应转储为字符串。您需要直接调用 REST 模块。

  2. 是的,您可以通过调用rlm_rest模块来实现,正如您所说的那样。字符串扩展只是在您想要对服务器响应进行后处理时才有用。假设您有一个自定义 API,它没有以正确的格式返回 JSON blob,您可以获取其余扩展的输出,将其传递给 JSON 映射并以此方式提取数据...至少在 v4.0.x 中你可以,不在 v3.0.x 中。

相关内容