401 bei Endpunkt field_names; oauth bei queries

Hallo Forum,

ich versuche gerade „zu Fuß“ per shell script die aktuellen Zählerdaten abzufragen und in eine influx DB zu schreiben.

OAuth funktioniert soweit, ich bin in der Lage, bswp. den Endpunkt
https://api.discovergy.com/public/v1/meters
abzufragen, auch mehrfach mit jeweils geänderten nonce / timestamp.

[{„meterId“:„11ac266457604f408a86cxxxxxxxxxxd“,…

Leider bekomme ich einen HTTP 401, wenn ich versuche, field_names abzufragen oder andere Abfragen mit queries vorzunehmen.

Ich bin der Meinung, daß der base_string für OAuth falsch ist - oder falsch geprüft wird.

Die meter und damit auch die meterId bekomme ich erfolgreich:

das funktioniert

params=(
  $(OAuth_param 'oauth_nonce' "$oauth_nonce")
  $(OAuth_param 'oauth_token' "$oauth_token")
  $(OAuth_param 'oauth_consumer_key' "$oauth_consumer_key")
  $(OAuth_param 'oauth_signature_method' "$oauth_signature_method")
  $(OAuth_param 'oauth_version' "1.0")
  $(OAuth_param 'oauth_timestamp' "$(date +%s)")
)

base_string=$(OAuth_base_string 'GET' 'https://api.discovergy.com/public/v1/meters' ${params[@]})
signature=$(_OAuth_signature "$oauth_signature_method" "$base_string" "$oauth_consumer_secret" "$oauth_token_secret")

curl -X GET \
  https://api.discovergy.com/public/v1/meters \
  -H 'Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2' \
  -H "Authorization: OAuth $(_OAuth_authorization_header_params_string ${params[@]})"

wenn ich das gleiche mit dem field_names endpunkt mache, bekomme ich einen 401

params=(
  $(OAuth_param 'oauth_nonce' "$oauth_nonce")
  $(OAuth_param 'oauth_token' "$oauth_token")
  $(OAuth_param 'oauth_consumer_key' "$oauth_consumer_key")
  $(OAuth_param 'oauth_signature_method' "$oauth_signature_method")
  $(OAuth_param 'oauth_version' "1.0")
  $(OAuth_param 'oauth_timestamp' "$(date +%s)")
)

base_string=$(OAuth_base_string 'GET' 'https://api.discovergy.com/public/v1/field_names' ${params[@]})
signature=$(_OAuth_signature "$oauth_signature_method" "$base_string" "$oauth_consumer_secret" "$oauth_token_secret")

curl -v -X GET \
	https://api.discovergy.com/public/v1/field_names?meterId=11ac266457604f408a86c31111111111 \
	-H 'Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2' \
	-H "Authorization: OAuth $(_OAuth_authorization_header_params_string ${params[@]})"

< HTTP/1.1 401 Unauthorized

Was mache ich falsch?
Die meterID habe ich verfälscht, die ID wird aus der meters Abfrage entnommen.

Keinen Unterschied, wenn ich die meterId mit in den base_string mit aufnehme für die signature.

Hilfe!

Viele Grüße,
Spock

Es gibt Ouath Bibliotheken, die den Query-String beim Hash nicht berücksichtigen, weshalb ich generell bei der API nur Basic-Authentication verwenden würde, da hierbei das Problem nicht auftritt.

Ok, guter workaround, funktioniert:

curl ${lUrl}?meterId=11ac266457604f408a86c31111111111 \
   -u "${lDiscoUser}:${lDiscoPassword}"

Allerdings würde ich schon gerne die Kommunikation einheitlich Oauth gesichert führen. Ist ja keine Raketentechnik. Gibt es vielleicht ein Codingbeispiel, aus dem hervorgeht, was in den basestring für die signature reingeht und welche oauth Parameter genannt werden müssen?

Ich habe probiert, den Basestring mit dem ?meterId=… zu ergänzen, und dann zu unterschreiben. Hat alles nichts geholfen.
Könnte das jemand auf Serverseite verifizieren, wie dort der oauth basestring bei Nutzung https://api.discovergy.com/public/v1/field_names mit einem meterId Parameter gebildet wird?