Picture of Jakob 5281
Registered 3 years 297 days
Jakob 5281 Thursday, 11 February 2021, 09:23 AM
users-admin App AddUser Websocket-Protokoll-Beschreibung
Hallo!

Als ganz frischer Innovaphone-Entwickler stehe ich vor folgendem Problem:
Ich habe mich mit meiner PBX über das WebSocket-Protokoll authentifiziert und kann so auf das AppService innovaphone-users-admin zugreifen [0]

Mein Ziel ist es jetzt einen neuen Benutzer mittels dieses AppServices anzulegen.
Dafür habe ich mir angesehen wie die MyApps Applikation das macht.
Es sendet diesen Befehl [1].
Die Frage ist jetzt, wie aus dem eingegebenen Passwort in der GUI "test", die verschlüsselten (?) Bytes "c785ec7b" berechnet werden.

Die einzige Dokumentation die ich gefunden habe ist [2].
Die beschreibt wie das Passwort mittels RC4 verschlüsselt wird.
Das habe ich ausprobiert, komme aber zu anderen Bytes und so kann sich der Benutzer dann nicht einloggen.

Gibt es eine öffentliche Dokumentation zum AddUser Befehl die beschreibt wie das funktioniert?

Danke und Liebe Grüße
Jakob

[0] https://wiki.innovaphone.com/index.php?title=Howto:Talking_to_the_v13_Application_Platform_using_PHP
[1] MyApps AddUser-Befehl:
{
"mt":"AddUser",
"username":"hans-peter",
"password":"c785ec7b", <= input: "test", but how to geht thoes bytes from test (plus seed maybe?)
"seed":"35176543062303666", <= simply random generated? But what to do with this
"firstname":"hans",
"lastname":"peter",
"email":"",
"cn":"hans peter",
"telephonenumber":"",
"template":"",
"node":"root",
"loc":"development",
"executive":false,
"hide":false,
"src":"usersadmin"
}

[2] PBX-Passwörter verschlüsseln: https://wiki.innovaphone.com/index.php?title=Howto:Encrypt_or_Decrypt_PBX_user_passwords
Picture of Daniel Deterding (innovaphone)
Moderator Registered 14 years 358 days
Daniel Deterding (innovaphone) Thursday, 11 February 2021, 10:43 AM
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Hallo Jakob,

die AppWebsocket-Implementierung enthält eine encrypt-Funktion:

ws.encrypt(seed, data).

"seed": random-seed,
"password": ws.encrypt(random-seed, cleartext)

Ich habe die Online-Doku aktualisiert:
http://sdk.innovaphone.com/web1/appwebsocket/appwebsocket.htm

Gruß,
Daniel
Picture of Jakob 5281
Registered 3 years 297 days
Jakob 5281 Thursday, 11 February 2021, 12:35 PM
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Hallo Daniel!

Danke für die schnelle Antwort.
Ich verwende aber nicht die SDK direkt, sondern habe wie beschrieben eine eigene Applikation (konkret in C#) die direkt mit Websockets mit dem AppService kommuniziert, so wie Sie das auch in Ihrem Wiki vorgeschlagen haben.

Das heißt diese ws.encrypt-Funktion muss ich in C# nachentwickeln.

Haben Sie daher auch eine detaillierte Dokumentation der ws.encrypt(random-seed, cleartext) Funktion?

Liebe Grüße,
Jakob
Picture of Daniel Deterding (innovaphone)
Moderator Registered 14 years 358 days
Daniel Deterding (innovaphone) Thursday, 11 February 2021, 12:43 PM
1 of 1 users consider this post helpful
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Ah, da kruschtel ich doch mal meine C#-Implementierung hervor: Knackpunkt ist das Generieren vom Session-Key, der mittels Challenge und Klartextpasswort erzeugt wird.
Meine RC4-Klasse habe ich mal angehängt.

public void GenerateKey(object challenge)
{
string toHash = String.Format("innovaphoneAppSessionKey:{0}:{1}", challenge, this.password);
byte[] hash = Encoding.UTF8.GetBytes(toHash);

SHA256Managed sha = new SHA256Managed();
hash = sha.ComputeHash(hash);

this.key = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
}

public string Encrypt(string seed, string data)
{
return RC4.Encrypt(data, String.Format("{0}:{1}", seed, this.key));
}

public string Decrypt(string seed, string data)
{
return RC4.Decrypt(data, String.Format("{0}:{1}", seed, this.key));
}

Gruß,
Daniel
rc4.cs
Picture of Jakob 5281
Registered 3 years 297 days
Jakob 5281 Thursday, 11 February 2021, 02:36 PM
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Danke!

Ich glaube jetzt bin ich kurz davor.

Als challenge nehme ich jene, die ich von AppChallengeResult zurückgebkommen habe:
Beispielsweise: [0] => 50e85293246137e4

Und das Passwort?
Ich habe das Administrator-Passwort, das PBX-Passwort und das vom admin-Benutzer probiert, mit dem ich mich vorher auch mit [1] angemeldet habe.

Leider kann ich mich dann nie mit dem Benutzer [2] anmelden.
Wenn ich die challenge, seed und passwort von der GUI nehme, kommt auch nicht das selbe verschlüsselte Passwort zurück.

Verwende ich das falsche Passwort? Welches sollte denn funktionieren?

LG
Jakob

[0] AppChallengeResult: {"mt":"AppChallengeResult","challenge":"50e85293246137e4"}
[1] Login-Befehl {"mt":"Login","method":"digest","type":"user","username":"admin","userAgent":"csharp","nonce":"4afd31b9ee6b2bd3","response":"fcb050503c685cafba13b101e404cb7a9ff5decea0843e177da484004768b0c1"}
[2] AddUser: {"mt":"AddUser","username":"o","password":"59f72f","seed":"77376367145564601","firstname":"o","lastname":"o","email":"","cn":"o","telephonenumber":"","template":"","node":"root","loc":"development","executive":false,"hide":false,"src":"usersadmin"}


Picture of Daniel Deterding (innovaphone)
Moderator Registered 14 years 358 days
Daniel Deterding (innovaphone) Thursday, 11 February 2021, 05:07 PM
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Hmm, mal vom Passwort abgesehen: evtl. fährst du mit der PbxAdminApi sowieso besser.
Damit kannst du direkt in deiner AppWebsocket-Verbindung zum PBX-App-Objekt Objekte modifizieren und anlegen.
Zur Usersapp werden die dann automatisch repliziert.

http://sdk.innovaphone.com/doc/appwebsocket/PbxAdminApi.htm

Gruß,
Daniel
Picture of Matthias Schertler (innovaphone)
Moderator Registered 12 years 7 days
Matthias Schertler (innovaphone) Monday, 15 March 2021, 03:58 PM in response to Jakob 5281
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Hallo, wenn Du die PbxApi verwendest auf der Verbindung zu PBX0/APPS/websocket, musst Du übrigens einen AppWebsocket-Login verwenden, der hier beschrieben ist: http://sdk.innovaphone.com/doc/appwebsocket/AppWebsocket.htm Bei dem Beispiel oben hattest Du die Login-Messages aus dem myApps-Protokoll genommen. Die funktionieren nicht auf PBX0/APPS/websocket. Gruß, Matthias
Oliver Dawid
Registered 13 years 126 days
Oliver 349 Friday, 12 February 2021, 01:03 PM in response to Daniel Deterding (innovaphone)
Re: users-admin App AddUser Websocket-Protokoll-Beschreibung
Wenn ich das richtig sehe, verwendet ihr hier anstelle des Binary Strings die Hex Darstellung des Keys (anders als in der RC4 Verschlüsselung von Passwörtern in der PBX: http://wiki.innovaphone.com/index.php?title=Howto:Encrypt_or_Decrypt_PBX_user_passwords)

← You can define your color theme preference here