Benutzer per AIP anlegen

schubert72

Benutzer
Mitglied seit
06. Dez 2018
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
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
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
14.195
Punkte für Reaktionen
6.187
Punkte
569

schubert72

Benutzer
Mitglied seit
06. Dez 2018
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
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 }
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
14.195
Punkte für Reaktionen
6.187
Punkte
569
Die Rechte des Users sind ausreichend?
Passwort ist konform?
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
14.195
Punkte für Reaktionen
6.187
Punkte
569
Poste mal den vollständigen API-Response?
 

schubert72

Benutzer
Mitglied seit
06. Dez 2018
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
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";
}
?>
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.076
Punkte für Reaktionen
3.896
Punkte
488
Probiers mal mit http und Port 5000 statt 5001 als nasUrl
 

schubert72

Benutzer
Mitglied seit
06. Dez 2018
Beiträge
4
Punkte für Reaktionen
1
Punkte
1
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


 

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