Vraag

Downlink bericht verstoren token problemen

  • 12 April 2017
  • 12 reacties
  • 385 keer bekeken

Ik probeer een downlink bericht te versturen op thingspark, maar ik kom niet verder dan de volgende foutmelding:
Security Check. bad token

De informatie lijkt aardig verspreid, ik heb al veel verschillende variaties geprobeerd met de tijd en key.

Ik krijg al wel dezelfde output als in dit voorbeeld voor downlink:
https://zakelijkforum.kpn.com/lora-forum-16/uplink-and-downlink-messages-signed-with-sha-tokens-8313

Een stukje Java, hoe ik het nu probeer:
code:

String devId = "00112233";
String fPort = "4";
String payload = "00000AABBCC112233";
String route = "1";
String lrcKey = "AA11".toLowerCase();

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String timeStr = df.format(new Date());
String queryString = "DevEUI=" + devId + "&FPort=" + fPort + "&Payload="
+ payload + "&AS_ID=" + route + "&Time=" + timeStr;

String combined = queryString + lrcKey;
String actilityUrl = "https://api.kpn-lora.com/thingpark/lrc/rest/downlink";

try {
postConnect(actilityUrl + "?" + queryString + "&Token=" + sha256(combined));
} catch (IOException ex) {
System.err.println("postConnect: " + Log.stackTrace(ex));
}


Dit geeft het volgende HTTP request:
code:

POST /thingpark/lrc/rest/downlink?DevEUI=00112233&FPort=4&Payload=00000AABBCC112233&AS_ID=1&Time=2017-04-12T09:27:32Z&Token=cafb7803dba92ce0e647b025385016fa955139937fd01e7b00f1b47c69fea8f3 HTTP/1.1
charset: utf-8
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.8.0_60
Host: localhost:8088
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 0


Misschien gebruik ik de vekeerde key. Ik gebruik nu de LRC-AS key van de application server, zonder '-', en omgezet naar lowercase. Of doe ik nog wat anders fout?

12 reacties

Route=1 is sowieso fout. Je moet de AS_ID gebruiken die je in het aanleverende request krijgt. Iets met de volgende structuur: klantnummer.routeid waarbij klantnummer en routeid beide numeriek zijn.

Hoewel dat misschien afhankelijk is van je eigen naamgeving in de device manager.
In ieder geval moet het gelijk zijn aan devicemanager> Application Servers > je eigen server > Uplink/downlink security > AS_ID.

Volgens mij was er een beperking op de te gebruiken FPort. Ik kan alleen bevestigen dat FPort=1 werkt.
Het AS_ID is vrij instelbaar op de device manager. Deze krijg ik ook binnen bij uplink berichten.
Reputatie 3
Badge +1
Op het Developer portal maak ik gebruik van de lrc as key zoals deze wordt getoond, zonder aanpassingen. Dus met tussenstreepjes en zonder omzetting naar lower- of uppercase.
Dat wil ook nog niet werken.

Output van wat er nu verstuurd wordt, met de LRC-AS key met streepjes en hoofdletters:
(om 14:50:21)
code:

Hashing: DevEUI=0059AC0000173372&FPort=4&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-13T12:50:21Z**-**-**-**

Post: https://api.kpn-lora.com/thingpark/lrc/rest/downlink?DevEUI=0059AC0000173372&FPort=4&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-13T12:50:21Z&Token=0b7fbd65f8677fb6b4eeccbc1cf769aecfb4479fa2745cb678d25f1775af65bf

Response: Security Check. bad token
Reputatie 3
Badge +1
Volgensmij ziet alles er goed uit, de enige mogelijke oorzaak die ik nog kan bedenken is je SHA256 hasher.

Je kunt het eens testen of die in je code dezelfde output geeft als bijvoorbeeld deze website: http://www.xorbin.com/tools/sha256-hash-calculator
Die geeft hetzelfde resultaat.
Ik zal toch de key eens moeten controleren, maar de device manager laadt momenteel niet goed.
Elke application server ingericht in de device manager heeft dezelfde key. Deze werkt helaas niet.
De SHA256 hash token lijkt goed te zijn.

Volledige output met fictieve key:
code:

LRC-AS key: BE-EF-12-34-BE-EF-12-34-BE-EF-12-34-BE-EF-12-34
Hashing: DevEUI=0059AC0000173372&FPort=4&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-14T09:08:18ZBE-EF-12-34-BE-EF-12-34-BE-EF-12-34-BE-EF-12-34
Post: https://api.kpn-lora.com/thingpark/lrc/rest/downlink?DevEUI=0059AC0000173372&FPort=4&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-14T09:08:18Z&Token=3736c126cfad337096e73ed83996deade171c1bcdccc9f078333ee086c220b5a
Reputatie 3
Badge +1
Het enige verschil dat me nu nog opvalt is dat de tijd geen milli seconden bevat. Ik heb echter geen idee of dit verplicht is.
Milliseconden en FPort=1 aangepast, nog steeds bad token.

code:

LRC-AS key: BE-EF-12-34-BE-EF-12-34-BE-EF-12-34-BE-EF-12-34
Hashing: DevEUI=0059AC0000173372&FPort=1&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-14T10:40:00.362ZBE-EF-12-34-BE-EF-12-34-BE-EF-12-34-BE-EF-12-34
Post: https://api.kpn-lora.com/thingpark/lrc/rest/downlink?DevEUI=0059AC0000173372&FPort=1&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-14T10:40:00.362Z&Token=3c6e374b41b8ac37ef47715fa1e65ed8438681ddcb79039f41baae38eeafdba9
Het werkt op deze manier met een andere aansluiting. Daar was wel de key beschikbaar.

Nu vraag ik mij nog af, hoe kan ik zelf de key terugvinden op Thingpark?
In dit topic:
https://zakelijkforum.kpn.com/lora-forum-16/uplink-and-downlink-messages-signed-with-sha-tokens-8313
, wordt de key zo beschreven:
Both the KPN servers and your application server should now the secret 128 bits AS Key. You can find the AS-key under your profile

Dit kan ik niet vinden op Thingpark, waar staat dit "profile"?
In Thingpark kan je een Application Server activeren(eventueel na deactiveren), en daar kan je zelf de key opgeven. Dit kan met een 32 lowercase karakters hexadecimale string.

Ik had zelf nog wat foutmeldingen over te lage entropie, maar na een aantal verschillende pogingen is het toch gelukt om in te stellen.

Deze key ook in hetzelfde formaat gebruiken voor het token:
code:

Hashing: DevEUI=0059AC0000173372&FPort=1&Payload=000002F83131A95D&AS_ID=1&Time=2017-04-14T10:40:00.362Zbeef1234beef1234beef1234beef1234

Reageer