Shelly 2pm (Gen 2 Gen3) Authentication-Problem

hajueschmitz

Neues Mitglied
JDK 17, Zugriff auf shelly, Authentication, java.net.*

Es geht um Zugriff via http, konkret die URL. Nichts wirklich Hilfeiches bei Google gefunden.
In Shellyforen wieder keine Javakenntnisse (nur javascript)

"http://admin:passwort@192.168.178.146/rpc/Shelly.GetStatus"

Java Code:
URL url;
URLConnection con;
url = new URL(urlstr);
con=url.openConnection();

Solange am Shelly Authentication ausgeschaltet ist funktioniert das wunderbar.

MIT Authentication folgt ein "Error 401".

mit "curl" auf dem Radpberry Pi läuft die URL: (wie kriege ich das mit Java hin??)


curl http://admin:******@192.168.178.146/rpc/Shelly.GetStatus -v --digest
  • Trying 192.168.178.146:80...
  • Connected to 192.168.178.146 (192.168.178.146) port 80 (#0)
  • Server auth using Digest with user 'admin'
GET /rpc/Shelly.GetStatus HTTP/1.1
Host: 192.168.178.146
User-Agent: curl/7.88.1
Accept: /
< HTTP/1.1 401 Unauthorized
< WWW-Authenticate: Digest qop="auth", realm="shelly2pmg3-e4b3231d66d4", nonce="1763706843", algorithm=SHA-256
< Content-Length: 0
< Server: ShellyHTTP/1.0.0
< Connection: close
<
  • Closing connection 0
  • Issue another request to this URL: 'http://admin:******@192.168.178.146/rpc/Shelly.GetStatus'
  • Hostname 192.168.178.146 was found in DNS cache
  • Trying 192.168.178.146:80...
  • Connected to 192.168.178.146 (192.168.178.146) port 80 (#1)
  • Server auth using Digest with user 'admin'
GET /rpc/Shelly.GetStatus HTTP/1.1
Host: 192.168.178.146
Authorization: Digest username="admin", realm="shelly2pmg3-e4b3231d66d4", nonce="1763706843", uri="/rpc/Shelly.GetStatus", cnonce="M2MwNTFlODRkZTBhMzA5N2I2OGQ3MTY5OGQwMTUxYmQ=", nc=00000001, qop=auth, response="9d52116c4807585f4d728118e5628e806bebd39d655765f06d5e6d6a856fdc6d", algorithm=SHA-256
User-Agent: curl/7.88.1
Accept: /
< HTTP/1.1 200 OK
< Content-Type: application/json
< Content-Length: 1456
< Server: ShellyHTTP/1.0.0
< Connection: close
<
{"ble":{},"bthome":{}, .....

usw usf korrekter json Output.


*******
Danke für Hinweise!
 

hajueschmitz

Neues Mitglied
erst mal vielen Dank für die rasche Antwort.

Wenn ich den Text bei baeldung richtig verstanden habe läuft das so:

  • Base64-Encoding der userdaten
  • login [connection.setRequestProperty("Authorization", authHeaderValue);]

und danach ggf. Abfragen.

Ich werde damit einmal experimentieren: in meinem Fall muss die Abfrageurl beim "openconnection" gleich mit übergeben werden.

Leider will der Shelly das in jeder einzelnen Abfrage so:
"http://admin:passwort@192.168.178.146/rpc/Shelly.GetStatus"

also nicht zuerst login und danach div. Abfragen.

Es stellt sich also die Frage "wie baue ich den verschlüsselten String in die URL ein?

Eine Funktion für den 1.Teil hätte ich sogar hier:
public String authcon (String name, String pwd) {
//java.util.Base64.getEncoder = new java.util.Base64();
// BASE64Encoder encoder = new BASE64Encoder();
String authString = name + ":" + pwd;
byte[] bb=authString.getBytes();
String authEncBytes =Base64.getEncoder().encodeToString(bb);
return(authEncBytes);
}
 

Ähnliche Java Themen

Neue Themen


Oben