Freeradius
FreeRADIUS REST 擴展
我正在研究 FreeRADIUS 3.0.15 和 NodeJS 中的 API 伺服器之間的集成,它將處理記帳、授權和身份驗證。這一切都記錄在案(例如,這個 repo是一個非常有價值的起點)並且相對簡單。
但是,我也想使用動態客戶端模組,讓我的 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 } }
這可行,儘管有幾個問題:
- *是否可以只呼叫一次伺服器以獲得不同的屬性?*在上面引用的執行緒中,其中一位作者建議“正確格式化您的響應”並連結到一些 API 文件,但老實說,我無法理解它的含義。
- *是否可以發送帶有 JSON 有效負載的 POST 請求?*這並不重要,但在配置 rest 模組時很容易做到,只需聲明一個部分:
# /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 }
JSON 響應格式記錄在raddb/mods-available/rest中。郵件列表中的連結最初連結到一個錨點,該錨點也顯示相同的 JSON 響應格式,但那些已經過時了。
- 是的,您可以返回具有不同列表、運算符和值的多個屬性,但是其餘的字元串擴展不會這樣做,它只會將 API 伺服器的響應轉儲到字元串中。您需要直接呼叫 REST 模組。
- 是的,您可以按照您所說的呼叫
rlm_rest
模組。字元串擴展只是您想要對伺服器響應進行後處理。假設您有一個自定義 API,它沒有以正確的格式返回 JSON Blob,您可以獲取其餘擴展的輸出,通過 JSON 映射提供它並以這種方式提取數據……至少在 v4 中可以.0.x,不在 v3.0.x 中。