Password​ ​based authentication​ ​​no​ ​longer​ ​​supported​ ​by​ ​March​ ​2018​

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11217

    #31
    preslmayer Könntest du mir einen kurzen Schub geben bezüglich Token-Based Auth:
    Wie auch du festgestellt hast, widerspricht sich ja die Doku selbst:
    Einmal heißt es: Token anfordern und damit verschlüsselt authentifizieren.
    An der anderen Stelle heißt es, den Token verschlüsselt abholen.

    Aus deinem Code als Klasse werde ich leider auch nicht ganz schlau, wo wann was wie aufgerufen wird .

    Ist es nun so, dass der Token noch ohne dem PublicKey-Gedöhns abgeholt werden kann, oder ist gettoken schon ein encrypteter Request.

    Ich hätte jetzt straight-forward den "Acquiring​ ​tokens"-Teil probiert, und bekomme nur Error 400 Bad Request.

    Mein Request schaut etwa so aus:
    Code:
    http://ms/jdev/sys/gettoken/11223344556637626139326139323966386462373764396364393666326362626634616638626462/loxberry/2/098802e1-02b4-603c-ffffeee000d80cfd/hello
    Wie schaut der gettoken bei dir aus?

    lg, Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • preslmayer
      Dumb Home'r
      • 11.01.2016
      • 21

      #32
      Hallo Cristian!

      Der plain Request Text für den gettoken schaut bei mir so aus:

      Code:
      jdev/sys/gettoken/318e44128976d26500237756288a25365bdea284/username/2/edfc5f9a-aaaa-4cad-9dddcdc42c732be2/yourappname
      Diesen musst du noch encoden und den encodeten Request zum ms schicken (session key nicht vergessen! " ...?sk=.... ").

      Sieht dann ungefähr so aus:

      Code:
      /jdev/sys/enc/1yjW57IYy2qYnUMbDUs2DAeofgWfhn%2BENDl1YJIYI4Flk2Vv5XsU5AK3H%2BN4fzhf33TLEL2T%2BuzVRgFORxdQF7BzjpGNYlXe1PpcWJTipgvmMRAsO1Tsi%2BwWI%2B%2FIapJwJqAFWwNRsPTvb4URAxsBfQZSYbWX3RtmYEVc9kVLbQGex9tkW6qsY9WK8GIlaoSGuH02n%2FPmpiuDYAqTZZkNew%3D%3D?sk=xyOWjRU3KWRKpyJOTTjbrdNuGt%2BLmVRbnzE1vuQD5iFx6KXmtZ6VnQScPD8Gu693mU4CVl7f5bVsSJlq6qNsxu14WwJp%2B2VbkFWskLOYV3X89T2ApNlTcgb2S0HGjDmsm9re76gK66udL54KeFpr5FJC77mcH1v3ORXGhG3TH1k%3D
      lg

      Kommentar


      • Christian Fenzl
        Christian Fenzl kommentierte
        Kommentar bearbeiten
        Danke! Gibt’s wieder was zu tun in der „Nachtschicht“ :-)

      • Christian Fenzl
        Christian Fenzl kommentierte
        Kommentar bearbeiten
        Sorry, aber deren Spezifikation ist für'n Ar***. Das lässt sich leicht implementieren, wenn ich im Loxone-Großraumbüro rüber schreien kann, wie das jetzt sein soll, aber mit DER Doku hat das App-Team das _sicher nicht_ implementiert.

      • preslmayer
        preslmayer kommentierte
        Kommentar bearbeiten
        Ja, die Beschreibung von Loxone is nicht einfach zu lesen.
        Aber schau dir meinen Node-js Code an, in diesem solltest du alles raus lesen können.
        Mach dir vor der Ausführung ein paar console.log's rein, dann siehst du was wo wie drinnen steht.
        Außerdem musst du höllisch aufpassen, dass nicht irgendwo ein falsches Zeichen drinnen steht. Es reicht schon, wenn ein \n zu viel in einem String steht.

        In welcher Programmiersprache versuchst du dein Glück?
    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11217

      #33
      preslmayer
      Ich bin mit PHP unterwegs.

      Die Command Encryption scheint zu funktionieren - im MS-Debug-Monitor sehe ich meinen encrypted und dann den decrypted Request.
      Auch den Token-Request sehe ich decrypted, aber es bleibt beim 401 Unauthorized.

      Dein Code hat mir schon viel geholfen. Z.B. das Patchen des Public Keys war leichter bei dir nachzuschauen, als selbst draufzukommen. Oder, dass du ein NULL am Ende des {plaintext} Strings beim Encoden anhängst.

      Das Operieren als Objektklasse in deinem Code macht's ein bisschen unübersichtlich, und ich kann es auch nicht ausführen.Unklar ist mir auch, wofür du getkey und getkey2 brauchst (getkey wird lt. Loxone-Doku eigentlich garnicht gebraucht).

      Mein Code ist durch das viele Probieren schon ein wenig unübersichtlich, aber ich finde den Fehler einfach nicht.

      Wie geht's dir mit PHP? Könntest du dir ein Code-Review vorstellen? (wie gesagt, das ist noch Proof-Of-Concept Code, also noch nicht sehr strukturiert...)

      lg, Christian

      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar


      • preslmayer
        preslmayer kommentierte
        Kommentar bearbeiten
        Klar kann ich mir mal deinen PHP Code ansehen. Vlt. fällt mir was auf.
        Die function getkey ist für den getToken irrelevant. Dabei brauchst du nur die getkey2 funktion. Ich dachte mir damals, dass ich diesen für den authCommand benötige.
        AuthCommand habe ich selbst noch nicht zum laufen bekommen.

        Das Node Programm von mir kannst du auf der Konsole einfach mit "node example.js" starten (vorrausgesetzt du hast node.js installiert https://nodejs.org/en/download/). Du musst nur vorher deine Einstellungen im Source vornehmen (ip, port, user und pass deines MS). Eventuell musst du noch Module für http, crypto etc. nach installieren. Das weiß ich aber nicht mehr genau.
    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11217

      #34
      preslmayer Wie schon per PM gesagt: Du bist der beste!

      Einmal hex2bin vergessen.....

      Jetzt wird das noch etwas getestet und neu in Form gegossen!

      Danke nochmal!!
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar


      • preslmayer
        preslmayer kommentierte
        Kommentar bearbeiten
        Gerne! Freut mich, wenn ich helfen konnte! ;-)
        Wie schon erwähnt, einen authCommand mit dem Token habe ich noch nicht geschafft.

      • Christian Fenzl
        Christian Fenzl kommentierte
        Kommentar bearbeiten
        Ich Probier mal
    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11217

      #35
      Command senden geht bei mir auch nicht.
      Es ist einfach eine besch**** Anleitung.

      Hat sicher wieder was mit dem {key} zu tun. Diese "Variable" wird in der Anleitung/im Ablauf ja inflationär verwendet. Wir müssen selbst einen {key} erzeugen, für den Token müssen wir mit getkey einen {key} abfragen, und bekommen einen {key} zurück, und den Token verschlüsseln wir einfach mit dem {key}. getkey liefert einen {key} zurück, der lustigerweise nicht gleich ist wie der mit dem {key} verschlüsselte gettoken-Request, der einen {key} zurückliefert, den man "weiterverwenden kann (hä?) wie einen {key} von getkey".

      Ich weiß beim Command echt nicht mehr, welchen der drei {key}'s ich nehmen soll. Super Doku...
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar

      • preslmayer
        Dumb Home'r
        • 11.01.2016
        • 21

        #36
        Habe bemerkt dass eine Liste von Pwd, Key und HMAC Werten im MS-Debug-Monitor angezeit wird, sobald ich den authCommand absetze. Diese wird anscheinend durchlaufen.
        Dabei ist mir aufgefallen, dass es hier immer pro Pwd, 3 Key's plus HMAC's angezeigt werden. Die 3 Key's wiedeholen sich bei jedem Pwd-wechsel. HMAC's sind immer unterschiedlich (logisch!):

        Hier ein Beispiel:
        Code:
        [SIZE=10px][FONT=courier\ new]PRG Pwd: [COLOR=#008000]01015FE94E4EC7801555CF65C2DC8C279DF7F1C6 [/COLOR]Key: [COLOR=#FFA500]11114343353938413543394431453543323945333339363439313632373735464337323943443231 [/COLOR]HMAC 717616C5E9A8F897FD252E717662E2E1CE069244
        PRG Pwd: [COLOR=#008000]01015FE94E4EC7801555CF65C2DC8C279DF7F1C6 [/COLOR]Key: 22223544383245444336343444443130393443424233323341383543414243363735353232343246 HMAC 513C951D3AEFA392FE2335694557DA509458DEA9
        PRG Pwd: [COLOR=#008000]01015FE94E4EC7801555CF65C2DC8C279DF7F1C6 [/COLOR]Key: 33333637393542313639394142334431304134433931363343353733463031343142353533353735 HMAC C91F2308C2EF219CA0A0F16FF90A8C522E623B31
        PRG Pwd: 0201B8521E8F8D76A42854EF1FD8B80601BCF14E Key: [COLOR=#FFA500]11114343353938413543394431453543323945333339363439313632373735464337323943443231 [/COLOR]HMAC 85D0AC2B4A48369F103A590102479DE1827AE5AD
        PRG Pwd: 0201B8521E8F8D76A42854EF1FD8B80601BCF14E Key: 22223544383245444336343444443130393443424233323341383543414243363735353232343246 HMAC 528DDA8269C769988C7AC65BB08C275EF1488752
        PRG Pwd: 0201B8521E8F8D76A42854EF1FD8B80601BCF14E Key: 33333637393542313639394142334431304134433931363343353733463031343142353533353735 HMAC 4BAF4375FE0581957071DB1D1359BAADC6ECF2AF
        PRG Pwd: 03018F5B4F5A11DC10BDD999F3877A134F8AFA3A Key: [COLOR=#FFA500]11114343353938413543394431453543323945333339363439313632373735464337323943443231 [/COLOR]HMAC 8CFCAEB8B6EDC098FB448FA2A1A067AB15902F3F
        PRG Pwd: 03018F5B4F5A11DC10BDD999F3877A134F8AFA3A Key: 22223544383245444336343444443130393443424233323341383543414243363735353232343246 HMAC 9A7293A61F5DFF91F48410617939A2A2C05EDABD
        PRG Pwd: 03018F5B4F5A11DC10BDD999F3877A134F8AFA3A Key: 33333637393542313639394142334431304134433931363343353733463031343142353533353735 HMAC 104400F697B8649410529F9A14A181C9AC1EDF33
        PRG Pwd: 0401E10FBAF6D0E926F42524DF2A28075F41C2E7 Key: [COLOR=#FFA500]11114343353938413543394431453543323945333339363439313632373735464337323943443231 [/COLOR]HMAC F872DE9E0FC1699D61DEC9880BEB65B93BD4D34D
        PRG Pwd: 0401E10FBAF6D0E926F42524DF2A28075F41C2E7 Key: 22223544383245444336343444443130393443424233323341383543414243363735353232343246 HMAC C573401394F30194054D6EC47F105B69D0562B0C
        PRG Pwd: 0401E10FBAF6D0E926F42524DF2A28075F41C2E7 Key: 33333637393542313639394142334431304134433931363343353733463031343142353533353735 HMAC 2EDE3CDF9918AC97329E7DBE8FDE90C4DF30EF86
        HTTP6 Web login error Invalid Token
        HTTP6 HTTPWCrypt: Token Auth not successful
        HTTP6 401 Unauthorized 4[/FONT][/SIZE]
        Vielleicht gibt das einen Hinweis auf den richtigen Key für den TokenHash.

        Muss aber dabei erwähnen, dass ich immer den selben SALT, IV und KEY verwendet habe. Ich habe mir diese nicht vom programm mit einem randomizer generieren lassen.

        zb:
        Code:
        salt = (0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
        iv = (0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
        key = (0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00)
        Zuletzt geändert von preslmayer; 04.05.2018, 08:12.

        Kommentar

        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11217

          #37
          Die Liste hab ich auch gesehen, hab aber außer dem Key nichts identifizieren können.
          Ich generiere meinen key und salt zwar, verwende es aber auch bei allen Requests.
          Der selbst generierte {key}, der für die Command-Encryption auch funktioniert, hat mit dem zurückgelieferten {key} vom MS nichts zu tun.

          Ich habe probiert, den von getkey gelieferten {key} weiterzuverwenden, oder den von gettoken gelieferten, neuen {key} zu verwenden, geht für den eigentlichen Command mit Token-Auth beides nicht.

          Mir ist aus der Command Encryption auch noch nicht ganz klar, was ich später alles weiterverwenden darf (wenn ich den Token mal von Disk lese - was ich da noch weiterverwenden darf oder muss ).

          Ich bin jetzt zwar schon ziemlich genervt (die eigentliche Token-Auth wären - wenn der Token da ist - ja nur noch drei Zeilen Code), aber ich hab mal ein Ticket bei Loxone gemacht, ob sie nicht einen Beispielcode für HTTP-Token-Auth haben.

          Loxone ist ja gewillt, die Kommunikation sicher zu gestalten, da will man hoffentlich nicht, dass zum Miniserver weiterhin Plain-Text Credentials geschickt werden müssen. Deswegen habe ich ein Fünkchen Hoffnung.
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar


          • preslmayer
            preslmayer kommentierte
            Kommentar bearbeiten
            Ich glaube ich hab's:
            Hole dir einen {key} mittels getkey, und probier's mal wie folgt:

            Code:
            ...
            var command = '01FFFFFF.I1/On';
            var key = new Buffer(that._getkey.key, 'hex').toString('utf8');
            var hmac = crypto.createHmac('sha1', key);
            var hash = hmac.update(that._token.token).digest('hex');
            var auth_cmd = 'jdev/sps/io/' + command + '?autht=' + hash + '&user='+ that._username;
            var auth_cmd_enc = this._enc_command(auth_cmd);
            var auth_cmd_enc_sk = auth_cmd_enc + '?sk=' + that._session_key;
            ...
        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11217

          #38
          Das funktioniert!
          Das zusätzliche getkey brauchst du dafür gar nicht, sondern du nimmst den key, den gettoken zurückliefert.

          Interessant ist, dass das im Großen und Ganzen anders ist als in der Doku - ${user}:${token} wird überhaupt nicht verwendet, und dessen HMAC-SHA1.
          Was mich vermuten lässt, dass der {user} in "{user}:{token}" vielleicht optional ist, und der User, der übergeben wird, irgendwie nicht gleich ist dem User, der initial zum Anfordern des Tokens verwendet wird.

          Bei der Command-Encryption haben wir ja das $plaintext = "salt/$salt/$cmd" . "\0" drin (also die Null am Ende). Damit wird der Plaintext-Command bei meinem ersten getkey2 zu "salt/630/jdev/sys/getkey2/admin"+Null. Mein Bauch sagt mir, dass es irgendwas damit zu tun hat.

          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar


          • preslmayer
            preslmayer kommentierte
            Kommentar bearbeiten
            Kann es sein dass der Key den man mit /getkey bzw. /gettoken bekommt nur immer einmal verwendet werden darf?
        • preslmayer
          Dumb Home'r
          • 11.01.2016
          • 21

          #39
          Ja, das mit dem key von gettoken habe ich auch vorhin bemerkt,

          "\0" wird verwendet um den String richtig zu terminieren. Dies ist wichtig beim encrypten da immer die vollen 256 Bit verwendet werden. Der Cipher weiß sonst nicht wo der String endet.

          Jetzt möchte ich noch gerne raus bekommen wie ich refreshtoken und killtoken ausführen kann.

          Kommentar

          • Christian Fenzl
            Lebende Foren Legende
            • 31.08.2015
            • 11217

            #40
            Ich versuche mich noch erfolglos beim Decrypt des Response (bei /fenc/). Vielleicht fehlt mir auch nur das \0
            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

            Kommentar


            • preslmayer
              preslmayer kommentierte
              Kommentar bearbeiten
              Hallo Christian!
              Hast du den Decryp des Response von /fenc/ schon hin bekommen?
              Wenn nicht probiers mal so:
              PHP-Code:
              ...
              $responsedec = openssl_decrypt($responseenc, "AES-256-CBC", $key,  OPENSSL_ZERO_PADDING, $iv) ;
              
              echo "Response decrypted: " . $responsedec. "\n";
              ... 
              
          • Gast

            #41

            Kommentar


            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Kenne ich in der Zwischenzeit, hilft aber bei PHP auch nicht weiter.
          • Christian Fenzl
            Lebende Foren Legende
            • 31.08.2015
            • 11217

            #42
            Du hast natürlich wieder Recht. OPENSSL_ZERO_PADDING war es beim Decrypten.
            Und dann den Response trimmen, damit PHP das json parsen kann.

            Ich bringe damit auch auch keinen zweiten, authentifizierten Command durch - ich habe jetzt aber schon so viel Trace-Output, dass ich mich nicht mehr auskenne.

            Ich implementiere das gerade neu, damit es dann das am LoxBerry machen kann, wofür es gedacht ist. Ich bin jetzt übers verlängerte Wochenende weg. Der Key-Hürdenlauf mit dem Miniserver ist also noch nicht zu Ende....
            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

            Kommentar

            Lädt...