Start · Sprachen · PHP · Referenz · radius_auth_open

radius_auth_open

Funktion

Erstellt ein neues RADIUS-Handle, das für Authentifizierungsanfragen an einen RADIUS-Server verwendet werden kann.

seit PHP 1.1.0 Kategorie: misc

Signatur

radius_auth_open(): resource|false

Beschreibung

radius_auth_open() initialisiert eine neue RADIUS-Verbindungsressource für Authentifizierungszwecke (Access-Request). Diese Ressource ist der Ausgangspunkt für alle weiteren RADIUS-Operationen wie das Hinzufügen von Servern, das Setzen von Attributen und das tatsächliche Versenden von Authentifizierungsanfragen.

Das zurückgegebene Handle wird bei anderen RADIUS-Funktionen als erster Parameter übergeben, etwa bei radius_add_server(), radius_put_attr() und radius_send_request(). Es kapselt den internen Zustand der Verbindung und ermöglicht es, mehrere unabhängige RADIUS-Handles gleichzeitig zu verwalten.

Diese Funktion ist Teil der PECL-Erweiterung radius und muss entsprechend installiert und aktiviert sein. Sie eignet sich besonders für Szenarien, in denen eine Anwendung Benutzeranmeldeinformationen über das RADIUS-Protokoll gegen einen zentralen Authentifizierungsserver prüfen möchte — beispielsweise in Netzwerkzugangs-Portalen (Captive Portals) oder VPN-Backends.

Nach der Verwendung sollte das Handle mit radius_close() freigegeben werden, um Ressourcen korrekt zu bereinigen.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall eine RADIUS-Ressource zurück, die als Handle für nachfolgende RADIUS-Funktionen verwendet werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Einfache RADIUS-Authentifizierungsanfrage

<?php
// RADIUS-Handle für Authentifizierung öffnen
$radius = radius_auth_open();

if ($radius === false) {
    die('RADIUS-Handle konnte nicht erstellt werden.');
}

// RADIUS-Server hinzufügen (Host, Secret, Port, Timeout, Wiederholungen)
if (!radius_add_server($radius, '192.168.1.10', 1812, 'geheimes_shared_secret', 3, 3)) {
    die('Server konnte nicht hinzugefügt werden: ' . radius_strerror($radius));
}

// Neue Anfrage vom Typ Access-Request erstellen
if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
    die('Anfrage konnte nicht erstellt werden: ' . radius_strerror($radius));
}

// Attribute setzen: Benutzername und Passwort
radius_put_attr($radius, RADIUS_USER_NAME, 'max.mustermann');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'geheimesPasswort');

// Anfrage senden und Ergebnis auswerten
$ergebnis = radius_send_request($radius);

switch ($ergebnis) {
    case RADIUS_ACCESS_ACCEPT:
        echo 'Authentifizierung erfolgreich!' . PHP_EOL;
        break;
    case RADIUS_ACCESS_REJECT:
        echo 'Authentifizierung abgelehnt.' . PHP_EOL;
        break;
    default:
        echo 'Fehler: ' . radius_strerror($radius) . PHP_EOL;
}

// Handle freigeben
radius_close($radius);
Authentifizierung erfolgreich!

Fehlerbehandlung beim Öffnen des Handles

<?php
// RADIUS-Handle öffnen mit expliziter Fehlerprüfung
$radius = radius_auth_open();

if ($radius === false) {
    // Fehler protokollieren und Vorgang abbrechen
    error_log('RADIUS: Konnte kein Authentifizierungs-Handle erstellen.');
    http_response_code(503);
    echo 'Authentifizierungsdienst momentan nicht verfügbar.';
    exit;
}

echo 'RADIUS-Handle erfolgreich erstellt, Typ: ' . gettype($radius) . PHP_EOL;

// Bereinigung
radius_close($radius);
RADIUS-Handle erfolgreich erstellt, Typ: resource

// Wichtig · Fallstricke

Sicherheitshinweis: Das Shared Secret zwischen PHP-Anwendung und RADIUS-Server sollte ausreichend lang und zufällig sein und niemals im Klartext in öffentlich zugänglichen Konfigurationsdateien gespeichert werden. Verwende Umgebungsvariablen oder geschützte Konfigurationsdateien.

PECL-Abhängigkeit: radius_auth_open() ist Teil der PECL-Erweiterung radius und steht nicht standardmäßig in PHP zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install radius).

Unterschied zu radius_acct_open(): Während radius_auth_open() ein Handle für Authentifizierungsanfragen (Access-Request, Port 1812) erstellt, ist radius_acct_open() für Accounting-Anfragen (Port 1813) gedacht. Beide Handles sind nicht austauschbar.