Freeradius

FreeRADIUS REST 擴展

  • February 13, 2018

我正在研究 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
   }
}

這可行,儘管有幾個問題:

  1. *是否可以只呼叫一次伺服器以獲得不同的屬性?*在上面引用的執行緒中,其中一位作者建議“正確格式化您的響應”並連結到一些 API 文件,但老實說,我無法理解它的含義。
  2. *是否可以發送帶有 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
}

在這方面,我想念的是 REST擴展的語法,我環顧四周,但找不到任何東西(我找到的唯一文件頁面說沒有可用的擴展)。

JSON 響應格式記錄在raddb/mods-available/rest中。郵件列表中的連結最初連結到一個錨點,該錨點也顯示相同的 JSON 響應格式,但那些已經過時了。

  1. 是的,您可以返回具有不同列表、運算符和值的多個屬性,但是其餘的字元串擴展不會這樣做,它只會將 API 伺服器的響應轉儲到字元串中。您需要直接呼叫 REST 模組。
  2. 是的,您可以按照您所說的呼叫rlm_rest模組。字元串擴展只是您想要對伺服器響應進行後處理。假設您有一個自定義 API,它沒有以正確的格式返回 JSON Blob,您可以獲取其餘擴展的輸出,通過 JSON 映射提供它並以這種方式提取數據……至少在 v4 中可以.0.x,不在 v3.0.x 中。

引用自:https://serverfault.com/questions/896918