Vraag

Check Things-Message-Token HTTPSplug

  • 23 March 2020
  • 23 reacties
  • 738 keer bekeken

Ik wil graag (zoals jullie aanbevelen) een Token-check toevoegen voor de data die binnenkomt via de HTTPSplug.  In jullie documentatie op https://docs.kpnthings.com/dm/plugs/https#the-request geven jullie aan dat de opbouw als volgt moet zijn:

token = sha256({senMLBody}{sharedSecret})

Ik heb dit in allerlei varianten geprobeerd, maar op geen enkele manier krijg ik een match met de Things-Message-Token die ik ontvang in de header van de post. 

Ik heb via https://emn178.github.io/online-tools/sha256.html  diverse opties geprobeerd zoals met en zonder {} rond de inhoud, met en zonder indented/pretty format, quotes, etc. Wat zou de exacte juiste opbouw moeten zijn?

Zie bijv. onderstaande opbouw. Wat is hier fout?

{[{"bn":"urn:dev:DEVEUI:0059AC00001B00B9:","bt":1584958638},{"n":"locOrigin","vs":"KPNLORA"},{"n":"latitude","u":"lat","v":52.215401},{"n":"longitude","u":"lon","v":6.01251},{"n":"radius","u":"m","v":127.929848},{"n":"locAccuracy","u":"%","v":9999},{"n":"locPrecision","u":"%","v":9999},{"n":"locTime","vs":"1584958638848"}]}{plainsecret}

 

Alvast bedankt!


23 reacties

Reputatie 7
Badge +6

Goedemorgen @Terralytics

Bedankt voor uw bericht! 
Het is goed dat u aan de bel trekt, we helpen u graag verder. 
Ook deze kwestie heb ik met wat collega's besproken en het zou in principe moeten werken. 

Het advies van mijn collega's is om de secret key aan te passen en dan een nieuwe poging te doen. We hebben ook een voorbeeld voor u. Als we als voorbeeld token ‘12345’ nemen en we verwerken dit in uw bericht dan wordt het: 

Token = sha256([{"bn":"urn:dev:DEVEUI:0059AC00001B00B9:","bt":1584958638},{"n":"locOrigin","vs":"KPNLORA"},{"n":"latitude","u":"lat","v":52.215401},{"n":"longitude","u":"lon","v":6.01251},{"n":"radius","u":"m","v":127.929848},{"n":"locAccuracy","u":"%","v":9999},{"n":"locPrecision","u":"%","v":9999},{"n":"locTime","vs":"1584958638848”}]12345)

Wilt u een nieuwe poging doen en laten weten of het gelukt is?

Helaas, ik heb het geprobeerd met de laatste data van de sensor na het aanpassen van de secret. Als ik bijvoorbeeld om te testen gebruik maak van https://emn178.github.io/online-tools/sha256.html , dan krijg ik op geen enkele manier een resultaat terug wat overeenkomt met de token in het bericht. Aangezien ik de secret nu wordt gebruikt voor het testen kan ik 'm wel gewoon delen. Als ik op de link hierboven de code invoer krijg ik “4706e2285643df8a61f769d045cb737a32b4cb3236fa3468c5439eac9a36fb4d” terug.

 

De code die ik heb gebruikt:

[{"bn":"urn:dev:DEVEUI:0059AC00001B00B9:","bt":1585136228},{"n":"locOrigin","vs":"KPNLORA"},{"n":"latitude","u":"lat","v":52.215561},{"n":"longitude","u":"lon","v":6.01558},{"n":"radius","u":"m","v":468.988464},{"n":"locAccuracy","u":"%","v":9999},{"n":"locPrecision","u":"%","v":9999},{"n":"locTime","vs":"1585136229152"}]x26WDqjZmPWm5FX1buvxKZ1RNGewRb5b&

 

Volgens de token die ik in de header meekrijg klopt dit niet. Daar is de token als volgt: “de4a0347768613405f6447db2322c0371fc32294fddbe88f3eb94b6cb9006120”

 

Waardoor zou dit kunnen komen?

Reputatie 7
Badge +6

Goedemiddag @Terralytics ,

Bedankt voor het delen van de code! 
Mijn collega's zijn weer aan de slag gegaan en komen er tot zover ook nog niet helemaal uit. 
Ik heb nu het verzoek gekregen om wat contactgegevens van u te vragen, zodat een van de specialisten direct contact met u op kan nemen. Wilt u mij een privébericht sturen met uw mobiele nummer? En kunnen wij het mailadres waarmee u geregistreerd bent ook gebruiken?

Reputatie 3
Badge

Hi,

Momenteel loop ik tegen dezelfde situatie aan. Is het probleem ooit achterhaald?

Moet zeggen dat het eigenlijk behoorlijk knullig is dat overal op die pagina geadviseerd wordt gebruik te maken van die Things-Message-Token maar de documentatie incompleet, onbegrijpbaar of onjuist blijkt te zijn.

It is very important to implement the token check before accepting the sent data in your application.

Groeten,

Reputatie 5
Badge +5

Durf ik niet te zeggen, zo te lezen is er destijds telefonisch contact geweest tussen de klant en 1 van onze IoT-specialisten. Ik zal eens navragen of het nog steeds speelt.

Reputatie 3
Badge

@Mark L. Heb je nog contact kunnen krijgen met de IoT-specialisten?

Reputatie 5
Badge +5

Goedemiddag @Timeless ik heb hier nog geen duidelijkheid over. Wordt vervolgd.

Reputatie 5
Badge +5

@Timeless Kun je de code die je gebruikt en de token die je in de header terugkrijgt in een privé bericht met mij delen?

Reputatie 3
Badge

@Mark L. Helemaal prima. ik heb je een prive bericht gestuurd.

@Mark L.Helemaal prima. ik heb je een prive bericht gestuurd.

Is het nog gelukt?

Reputatie 5
Badge +5

Goedemorgen @ruben.o, we hebben het aan onze kant nog niet kunnen reproduceren. Loop je tegen hetzelfde issue aan?

Ik heb via de arduino code de opzet van de things message token weten te verifieren. Wat mij opvalt is dat de SenML message anders is opgebouwd dan @Terralytics gebruikt. 

Wat de arduino code voor mij produceert is een dit SenML message:

[{"bn":"urn:dev:IMEI:865456053717862:","n":"temperature","u":"Cel","v":25.83269691}]

Als ik deze invoer in  https://emn178.github.io/online-tools/sha256.html met daarachter mijn secret key krijg ik wel dezelfde things-message-token die de arduino code ook voor mij genereerd. Waar ik problemen mee heb is om data in things te krijgen met een handmatige http request.

Reputatie 3
Badge

@Mark L.Helemaal prima. ik heb je een prive bericht gestuurd.

Is het nog gelukt?

Tot op heden nog niet, al ben ik er ook weinig mee bezig geweest moet ik eerlijk toegeven.
Wel heeft @Mark L. gevraagd hoe mijn complete request eruit ziet. Dit vind ik echter irrelevant, de specialisten hebben beknopte instructies gegeven hoe deze berekening zou moeten worden uitgevoerd, wanneer wij deze exact opvolgen lijkt deze niet te kloppen.

Op dit moment zijn er 3 (voor zover bekend) klanten van KPN met hetzelfde probleem, Ik ben daarom persoonlijk van mening dat KPN zal moeten aantonen dat de methode werkt alvorens ze specifieke cases gaan bekijken. En zodoende de documentatie hiermee aan te passen of te versterken zodat het ook voor anderen duidelijk wordt.

Reputatie 5
Badge +5

Ik heb jouw vraag doorgespeeld naar onze IoT-specialisten en vanuit hen kreeg ik het verzoek om het hele request op te vragen omdat zij het issue niet kunnen reproduceren. Met het volledige request kunnen zij gericht naar een oplossing zoeken. Mocht blijken dat het een algemeen issue is wat in de documentatie moet worden aangepast, dan zullen we dat zeker doen. Uiteraard hoef je het request niet te sturen als jij dit irrelevant vind, maar dan verwacht ik ook niet dat we veel verder gaan komen.

Reputatie 3
Badge

Dat begrijp ik, maar de documentatie zoals omschreven hier geeft aan welke parameters gebruikt worden om de messageToken te berekenen. hieronder het citaat:

messageToken = sha256({requestBody}{sharedSecret})

Deze requestBody en sharedSecret heb ik in een privé bericht doorgestuurd. Dus wat de documentatie betreft heb ik (en anderen in dit topic) alle informatie aangeleverd om door jullie IoT-specialisten te laten beoordelen. Als deze specialisten meer informatie uit het complete post bericht nodig hebben klopt de documentatie simpelweg niet.

Aangezien deze specialisten het niet kunnen reproduceren is mijn vraag, kunnen zij een voorbeeld met uitleg in dit topic plaatsen zodat wij hier allen van kunnen leren?

Reputatie 5
Badge +5

Ik heb de specialisten gevraagd of zij misschien een voorbeeld kunnen aanleveren.

Ook mij lukt. het niet om een match te krijgen met de Things-Message-Token in de header op basis van wat in de documentatie staat:

token = sha256({senMLBody}{sharedSecret})

Een voorbeeld zou zeer verhelderend kunnen werken alsmede dat dit het mogelijk maakt om voor developers om eenvoudig te checken of de implementatie die ze gebruiken juist is.

Zou het daarom toch mogelijk zijn om hier (of in de online documentatie) een voorbeeld te geven van deze berekening? 

Reputatie 7
Badge +6

Goedemorgen @thingsconnect

Bedankt voor je bericht!
Ik zie dat er na het laatste bericht in dit topic geen terugkoppeling meer is gekomen. Ik ga natuurlijk op onderzoek uit hoe dit zit en ga achter een voorbeeld aan. Zodra ik een update heb kom ik weer in de lucht. 

Reputatie 7
Badge +6

 Goedemiddag @thingsconnect,

Daar ben ik weer! 
Ik heb een terugkoppeling van de specialisten ontvangen, maar (nog) geen voorbeeld. Zij geven aan dat zij niets kunnen vinden over dat de key anders gegenereerd zou moeten worden dan in de documentatie staat. Zij hebben dit ook getest en daar komt uit wat er ook verwacht wordt.  Zij zijn daarom ook benieuwd wat jij binnen krijgt op de destination. Wellicht dat daar iets mis gaat om de sleutel te berekenen. 

Goedemiddag Rick,

Misschien als ik van mijn kant laat zien wat ik probeer, dat het dan duidelijker wordt. Het secret in deze post is tijdelijk gebruikt om het voorbeeld te kunnen genereren.

In het request dat ik ontvang van KPN krijg ik in de header deze waarde mee:

"things-message-token":["7cadf2941a32f193c484a9f31a4988c841cb98352be52a1d873bcfcb84484d60"]

De body van het request:

[{"bn":"urn:dev:DEVEUI:24E124592C108705:","bt":1693908295},{"n":"payload","vs":"ff34020200"},{"n":"port","v":85},{"n":"FCntUp","v":40},{"n":"FCntDn","v":31},{"n":"LrrRSSI","vs":"-113.0"},{"n":"LrrSNR","vs":"-2.25"},{"n":"LrrESP","vs":"-117.279411"},{"n":"DevLrrCnt","v":7},{"n":"SpFact","v":12},{"n":"SubBand","vs":"G2"},{"n":"Channel","vs":"LC6"},{"n":"ADRbit","v":1},{"n":"TIME_ORIGIN","vs":"THINGSENGINE"}]

Het secret gegenereerd door en opgeslagen in jullie portal:

S\4T*ZG1ZD2X01#ehxjZBjg7{hSwz}x/

Om dan de sha256 te bereken plak je als ik het goed begrijp de body en secret aan elkaar:

[{"bn":"urn:dev:DEVEUI:24E124592C108705:","bt":1693908295},{"n":"payload","vs":"ff34020200"},{"n":"port","v":85},{"n":"FCntUp","v":40},{"n":"FCntDn","v":31},{"n":"LrrRSSI","vs":"-113.0"},{"n":"LrrSNR","vs":"-2.25"},{"n":"LrrESP","vs":"-117.279411"},{"n":"DevLrrCnt","v":7},{"n":"SpFact","v":12},{"n":"SubBand","vs":"G2"},{"n":"Channel","vs":"LC6"},{"n":"ADRbit","v":1},{"n":"TIME_ORIGIN","vs":"THINGSENGINE"}]S\4T*ZG1ZD2X01#ehxjZBjg7{hSwz}x/

Als ik dat vervolgens in https://emn178.github.io/online-tools/sha256.html gooi dan krijg je als sha256 dit terug:

02baee95b0d063d9452e42e3dacdf175fc9a028cf177c93b7ee88bd8e45eb65c

wat dus niet overeen komt met het things-message-token.

Hopelijk kunnen de specialisten aangeven wat ik niet goed doe.

Reputatie 7
Badge +6

Goedemiddag @thingsconnect,

Ik heb vanmiddag onderstaande terugkoppeling van de specialisten ontvangen: 
 

De token wordt berekend met de volgende body:

1

[{"bn":"urn:dev:DEVEUI:24E124592C108705:","bt":1.693908295E9},{"n":"payload","vs":"ff34020200"},{"n":"port","v":85.0},{"n":"FCntUp","v":40.0},{"n":"FCntDn","v":31.0},{"n":"LrrRSSI","vs":"-113.0"},{"n":"LrrSNR","vs":"-2.25"},{"n":"LrrESP","vs":"-117.279411"},{"n":"DevLrrCnt","v":7.0},{"n":"SpFact","v":12.0},{"n":"SubBand","vs":"G2"},{"n":"Channel","vs":"LC6"},{"n":"ADRbit","v":1.0},{"n":"TIME_ORIGIN","vs":"THINGSENGINE"}]

Echter wat de klant meent te ontvangen is het volgende:

1

[{"bn":"urn:dev:DEVEUI:24E124592C108705:","bt":1693908295},{"n":"payload","vs":"ff34020200"},{"n":"port","v":85},{"n":"FCntUp","v":40},{"n":"FCntDn","v":31},{"n":"LrrRSSI","vs":"-113.0"},{"n":"LrrSNR","vs":"-2.25"},{"n":"LrrESP","vs":"-117.279411"},{"n":"DevLrrCnt","v":7},{"n":"SpFact","v":12},{"n":"SubBand","vs":"G2"},{"n":"Channel","vs":"LC6"},{"n":"ADRbit","v":1},{"n":"TIME_ORIGIN","vs":"THINGSENGINE"}]

Merk op dat het verschil zit in de formatting van de getallen.

Om te kijken wat wij nou uiteindelijk opsturen, heb ik een test uitgevoerd waarbij het resultaat naar een webhook.site gaat.

In eerste instantie lijken getallen op de manier van versie 2 binnen te komen. Echter staat de 'format json' aan.

Als ik deze uit zet krijg ik het volgende:

Hier is het resultaat nu gelijk aan versie 1, die ook gebruikt wordt om het token te berekenen.


Wat we hieruit op kunnen maken is dat het systeem van de klant er (onbedoeld) nog een formatting overheen gooit, waardoor de getallen anders opgeschreven worden en dus ook de token anders wordt.

We stellen voor dat dat de klant ditzelfde even probeert met de webhook.site, zodat we het ook aan zijn kant kunnen valideren. 

Goedenmiddag Rick,

Dank voor de terugkoppeling. Ik krijg nu idd het juiste resultaat terug als ik de body met de floats gebruik ipv de integers..

Reputatie 7
Badge +6

Goedemorgen, 

Heel goed om te lezen dat je nu het juiste resultaat krijgt! 
Als we nog iets anders voor je kunnen doen horen we het natuurlijk graag. 

Reageer