2024 年 PHP Conference Japan

Radius 函式

目錄

新增註釋

使用者貢獻的註釋 5 則註釋

andac dot aydin at code64 dot de
18 年前
如果您持續收到錯誤訊息

致命錯誤:未知函式:radius_auth_open() in...

而且您的伺服器是 Windows 系統(例如標準 xampp 安裝),您可能沒有移除 php.ini 中 "extension=php_radius.dll" 前面的註釋符號 ";”。

如果您這樣做了,但仍然收到錯誤

此外,請確保您編輯了正確的 php.ini,因為 xampp 安裝了多個 php.exe,但只有 "xampp/apache/bin/php.ini" 才是正確的!

我花了 2 天才找到這個!
SysCo/al - developer [at] sysco[dot] ch
16 年前
純 PHP radius 類別(不需要 radius 套件!)

我們已根據 RFC 2865 規則實作了一個純 PHP radius 類別。使用此類別,也可以進行 WWW 領域驗證。

類別摘要、完整的類別實作(LGPL)以及輔助檔案和範例,請參閱 http://developer.sysco.ch/php/

<?php

// (...)

class Radius
{
// (...)

public function Radius($ip_radius_server = '127.0.0.1', $shared_secret = '', $radius_suffix = '', $udp_timeout = 5, $authentication_port = 1812, $accounting_port = 1813)
{
// (...)
}

// (...)

function AccessRequest($username = '', $password = '', $udp_timeout = 0)
{

// (...)

$_socket_to_server = socket_create(AF_INET, SOCK_DGRAM, 17); // UDP packet = 17

if ($_socket_to_server === FALSE)
{
// (...)
}
elseif (
FALSE === socket_connect($_socket_to_server, $this->_ip_radius_server, $this->_authentication_port))
{
// (...)
}
elseif (
FALSE === socket_write($_socket_to_server, $packet_data, $packet_length))
{
// (...)
}
else
{
// (...)
$read_socket_array = array($_socket_to_server);
$write_socket_array = NULL;
$except_socket_array = NULL;

$received_packet = chr(0);

if (!(
FALSE === socket_select($read_socket_array, $write_socket_array, $except_socket_array, $this->_udp_timeout)))
{
if (
in_array($_socket_to_server, $read_socket_array))
{
if (
FALSE === ($received_packet = @socket_read($_socket_to_server, 1024))) // @ used, than no error is displayed if the connection is closed by the remote host
{
// (...)
}
else
{
socket_close($_socket_to_server);
}
}
}
else
{
socket_close($_socket_to_server);
}
}

// (...)

return (2 == ($this->_radius_packet_received));
}
}

?>

範例
<?php
require_once('radius.class.php');
$radius = new Radius('127.0.0.1', 'secret');
if (
$radius->AccessRequest('user', 'pass'))
{
echo
"驗證通過。";
}
else
{
echo
"驗證失敗。";
}
?>
shaun at verticalevolution dot com
18 年前
要擴展 jengo at phpgroupware dot org 的簡單範例,您可以使用以下方式將 NAS IP 位址添加到請求中:

radius_put_addr($radius, RADIUS_NAS_IP_ADDRESS, '127.0.0.1');

而不是使用 radius_put_attr 或 radius_put_string。我也必須使用 radius_put_string 來設定使用者名稱和密碼。
brett at silcon dot com
18 年前
這裡有一個更長的範例,它確實執行了挑戰回應,並且可以與 SecurID 驗證管理器一起使用。

http://www.webtrotter.com/securid_radius.txt

(腳本不允許我發布它,因為行太長,而且範例也太長了)。
jengo at phpgroupware dot org
19 年前
以下是如何針對 Radius 進行驗證的簡單範例。注意:這不處理挑戰回應。

<?php
$radius
= radius_auth_open();
if (!
radius_add_server($radius,'localhost',0,'radiussecret',5,3))
{
die(
'Radius 錯誤:' . radius_strerror($radius));
}

if (!
radius_create_request($radius,RADIUS_ACCESS_REQUEST))
{
die(
'Radius 錯誤:' . radius_strerror($radius));
}

radius_put_attr($radius,RADIUS_USER_NAME,'username');
radius_put_attr($radius,RADIUS_USER_PASSWORD,'password');

switch (
radius_send_request($radius))
{
case
RADIUS_ACCESS_ACCEPT:
echo
'登入成功';
break;
case
RADIUS_ACCESS_REJECT:
echo
'登入失敗';
break;
case
RADIUS_ACCESS_CHALLENGE:
echo
'需要挑戰回應';
break;
default:
die(
'Radius 錯誤:' . radius_strerror($radius));
}
?>
To Top