Benutzer per AIP anlegen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

schubert72

Benutzer
Registriert
06. Dez. 2018
Beiträge
4
Reaktionspunkte
1
Punkte
3
Hallo,
ich möchte mit einem PHP API-Zugriff eine Liste von Benutzern von meinem Synology NAS erhalten. Weiter möchte ich neue Benutzer auch per API anlegen können. Leider ist es mir bis dato nicht möglich. Ich stelle mich bestimmt zu dumm an.
Vielleicht hat jemand ein solches Projekt schon gemacht und kann mir einen Workaround oder Denkanstöße geben.
Danke
 
Hallo!
Vielen Dank für die Antwort. Das war natürlich auch meine erste Anlaufstelle. Ich habe scheinbar ein Problem mit den Parametern die ich zur Erstellung eines Users übergeben muss. Meine Idee sieht bis dato so aus:
$userParams = [
'api' => 'SYNO.Core.User',
'version' => 1,
'method' => 'create',
'name' => 'TestUser123',
'password' => 'SehrSicheresPasswort2024!',
'email' => 'testuser@example.com',
'group' => 'users',
'description' => 'Testbenutzer',
'_sid' => $sid
];
$userResponse = synologyApiCall("$nasUrl/webapi/entry.cgi", $userParams, 'POST');
echo "Antwort mit vollständigen Parametern:\n";
echo json_encode($userResponse, JSON_PRETTY_PRINT);

Authentifizierung funktioniert, SID ist vorhanden, abfrage der Gruppen funktioniert auch, nur ich kann keinen Benutzer erstellen. Ich erhalte den Fehler: Fehler beim Erstellen des Benutzers: { "error": { "code": 105 }, "success": false }
 
Die Rechte des Users sind ausreichend?
Passwort ist konform?
 
Poste mal den vollständigen API-Response?
 
Der User hat Adminrechte



<?php
// Synology NAS API-Konfiguration
$nasUrl = "http://192.168.178.10:5001"; // URL zur Synology NAS
$username = "adminuser"; // DSM-Admin-Benutzername
$password = "Winter2022!"; // DSM-Admin-Passwort
// Funktion: API-Aufruf durchführen
function synologyApiCall($url, $params, $method = 'GET') {
$ch = curl_init();
if ($method === 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
} else {
$url .= '?' . http_build_query($params);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
die("cURL-Fehler: " . curl_error($ch));
}
curl_close($ch);
return json_decode($response, true);
}

// Schritt 1: Authentifizieren und Session-ID abrufen
$authParams = [
'api' => 'SYNO.API.Auth',
'version' => 6,
'method' => 'login',
'account' => $username,
'passwd' => $password,
'session' => 'user_api_session', // Dynamischer Session-Name
'format' => 'sid'
];
$authResponse = synologyApiCall("$nasUrl/webapi/auth.cgi", $authParams);
if (!$authResponse['success']) {
die("Authentifizierung fehlgeschlagen: " . json_encode($authResponse));
}
// Session-ID aus der Authentifizierungsantwort extrahieren
$sid = $authResponse['data']['sid'];
echo "Authentifizierung erfolgreich! Session-ID: $sid\n";

// Schritt 2: Benutzer anlegen
$userParams = [
'api' => 'SYNO.Core.User',
'version' => 1,
'method' => 'create',
'name' => 'mustermannmax', // Einfacher Benutzername ohne Sonderzeichen
'password' => 'StarkesPasswort2024!', // Sicheres Passwort
'email' => 'sven.schubert@web.de', // Gültige E-Mail-Adresse
'group' => 'users', // Standard-Benutzergruppe (prüfen, ob 'users' existiert)
'description' => 'Testbenutzer', // Optionale Beschreibung
'expired' => 0, // Konto läuft nicht ab
'send_email' => 'no', // Keine E-Mail senden
'_sid' => $sid
];
$userResponse = synologyApiCall("$nasUrl/webapi/entry.cgi", $userParams, 'POST');
if ($userResponse['success']) {
echo "Benutzer erfolgreich erstellt.\n";
} else {
echo "Fehler beim Erstellen des Benutzers: " . json_encode($userResponse, JSON_PRETTY_PRINT) . "\n";
}
// Schritt 3: Abmelden
$logoutParams = [
'api' => 'SYNO.API.Auth',
'version' => 6,
'method' => 'logout',
'session' => 'user_api_session',
'_sid' => $sid // Session-ID einfügen
];
$logoutResponse = synologyApiCall("$nasUrl/webapi/auth.cgi", $logoutParams);
if ($logoutResponse['success']) {
echo "Abmeldung erfolgreich.\n";
} else {
echo "Fehler bei der Abmeldung: " . json_encode($logoutResponse) . "\n";
}
?>
 
Probiers mal mit http und Port 5000 statt 5001 als nasUrl
 
Hallo,
danke für die Hilfe, es lag jedoch hier dran:

$authParams = [
'api' => 'SYNO.API.Auth',
'version' => 6,
'method' => 'login',
'account' => $username,
'passwd' => $password,
'session' => 'user_api_session', // Dynamischer Session-Name
'format' => 'sid'
];

Hier habe ich die Version 6 genommen. Es muss die Version 7 sein ...

Danke
 
  • Like
Reaktionen: ctrlaltdelete

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat