Ankündigung

Einklappen
Keine Ankündigung bisher.

Home-Connect | 2nd

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Ich vermute, wir sprechen aneinander vorbei ...

    Zumindest in HC ... Wenn ich mich das erste Mal mit der API verbinde (oder wenn sich - warum auch immer - der SCOPE ändert), muss ich mich als CLIENT autorisieren (Request) ... dazu brauch ich "nur" den API-KEY.
    Code:
    https://api.home-connect.com/security/oauth/authorize?client_id=[COLOR=#FF0000]{API-KEY}[/COLOR]&redirect_uri=http://10.0.10.3/visu/hc.php&response_type=code&scope=IdentifyAppliance%20Dishwasher&state=homeconnect_auth
    Als Antwort, nach der Freigabe des Zugriffs und des SCOPEs durch den User, erhalte ich den CODE ... als Autorisation-Antwort (Response) ...
    Code:
    <redirect_uri>?code={[COLOR=#FF0000]code[/COLOR]}&grant_type=authorization_code
    Mit diesem CODE kann ich mich dann zum ersten Mal (oder wenn der Code aufgrund eines neuen SCOPEs erneuert wird) authentifizieren ... Request for ACCESS- und REFRESH-token.
    Code:
     
    https://api.home-connect.com/security/oauth/token/client_id={client_id}&client_secret={client_secret}&redirect_uri={redirect_uri}&grant_type=authorization_code&code={[COLOR=#FF0000]code[/COLOR]}
    Als Response erhalte ich den ersten ACCESS- und REFRESH-token ...
    Code:
    { "id_token": "{id_token}", "[COLOR=#FF0000]access_token[/COLOR]": "{access_token}", "expires_in": 86400, "scope": "{scope}", "refresh_token": "{[COLOR=#FF0000]refresh_token[/COLOR]}", "token_type": "Bearer", "state": "{state}" }
    Danach wie Du es oben beschrieben hast - alle 24h den ACCESS- (und REFRESH-) Token mit dem REFRESH-token erneuern ...

    Und mir geht es darum, wie kann ich den CODE, nicht die anderen zwei Token, automatisch aus der redirect_uri in meinen LBS übernehmen ?
    Ich vermute nicht allzu schwer, aber mir fehlt derzeit irgendwie die Phantasie ...

    DANKE vorab !!
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      #47
      OK, ich beantworte mir die Frage selbst - in der Hoffnung, dass ich nichts elementares vergessen habe und oder falsch gemacht habe ...

      Ich habe die hc.php um drei Zeilen Code ergänzt:

      PHP-Code:
          $json 'code.json';
          
      $tokens = array('code' => $code);
          
      file_put_contents($jsonjson_encode($tokens)); 
      HTML-Code:
      <!DOCTYPE html>
      <html>
      <head>
          <title>REDIRECT</title>
          <meta http-equiv="content-type" content="text/html; charset=UTF-8">
          <link rel="stylesheet" type="text/css" href="hc.css" />
      </head>
      <body>
      
      <?php
          $code        = $_GET['code'];
          $grant_type = $_GET['grant_type'];
          $state        = $_GET['state'];
          $remote        = $_SERVER['REMOTE_ADDR'];
          $name        = $_SERVER['SERVER_NAME'];
          $self        = $_SERVER['PHP_SELF'];
          $host        = $_SERVER['HTTP_HOST'];
          $session    = 'offen';
      
      
          $json = 'code.json';
          $tokens = array('code' => $code);
          file_put_contents($json, json_encode($tokens));                    
      ?>
      
      <center>
      <table>
          <thead>
              <tr>
                  <th>key</th>
                  <th>value</th>
              </tr>
          </thead>
      
          <tbody>
              <tr>
                  <td>code</td>
                  <td><?php echo "$code"?></td>
              </tr>
              <tr>
                  <td>grant</td>
                  <td><?php echo "$grant_type"?></td>
              </tr>
              <tr>
                  <td>state</td>
                  <td><?php echo "$state"?></td>
              </tr>
              <tr>
                  <td>remote</td>
                  <td><?php echo "$remote"?></td>
              </tr>
              </tr>
              <tr>
                  <td>redirect</td>
                  <td><?php echo "$name"."$self"?></td>
              </tr>
              <tr>
                  <td>self</td>
                  <td><?php echo "$self"?></td>
              </tr>
              <tr>
                  <td>host</td>
                  <td><?php echo "$host"?></td>
              </tr>
              <tr>
                  <td><?php echo "$session"?></td>
                  <td>SESSION state ist gleich GET state</td>
              </tr>
          </tbody>
          
          <tfoot>
          </tfoot>
      </table>
      </center>
      
      </body>
      </html>
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        #48
        Mein Punkt war, dass du den Code im LBS nicht benötigst wenn du in der hc.php schon das refresh token generierst.

        Das würde die Funktion im LBS geringer halten und bei neuem Scope wird das hc.php ohnehin wieder ausgeführt. Der LBS brauchte effektiv nur das refresh token.

        Man kann sogar das hc.php in den EXEC Bereich integrieren, dann wäre es insgesamt nur eine Datei

        Kommentar


          #49
          Zitat von jonofe Beitrag anzeigen
          Mein Punkt war, dass du den Code im LBS nicht benötigst wenn du in der hc.php schon das refresh token generierst.
          Das ist richtig, der LBS benötigt es nicht - meine derzeitige LBS Version benötigt diesen Code noch am Eingang um dann selbständig den Request für den ACCESS- und REFRESH-token machen zu können ...
          Die nächste Version wird den Code nun aus der code.json lesen und danach den Request machen ... so die Theorie.

          Schön wäre noch ein "BOT" der, wenn man den LBS triggert, die Mailadresse und Passwort von den Eingängen liest, den Autorisationslink ausfüht, die Mailadresse und das Passwort einträgt, OK, OK bestätigt und den Code einliest ... aber das geht nicht, weil nur grant_type=authorization_code erlaubt ist ... denke ich.

          Und danke für deine Unterstützung.
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            #50
            Weiß jemand die Funktion die aus dem LBS heraus die Edomi IP heraus liest ?
            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              #51
              Es ist keine Funktion sondern eine globale Konstante: global_serverIP

              Kommentar


                #52
                danke
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  #53
                  Gilt der CODE zeitlich unbegrenzt ?

                  Ich habe inzwischen mehrfach (nach Tagen ?) keine Zugriff mehr gehabt und erst nach Neuerzeugung eines CODES hat der LBS wieder funktioniert !

                  Bernator, hast Du dieses Problem auch ?

                  Kommentar


                    #54
                    Der CODE funktioniert normalerweise unbegrenzt (wird nach der Erzeugung von ACCESS- und REFRESH-tokens) nicht mehr benötigt.
                    Wenn sich aber im Nachhinein, zB der SCOPE oder STATE ändert, dann muss ein neuer CODE erzeugt werden, da der "alte" CODE ja unter anderen Umständen erstellt wurde.
                    Danke und LG, Dariusz
                    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                    Kommentar


                      #55
                      Bei OAuth2 hat der Code i.d.R. eine zeitlich begrenzte Gültigkeit. Beim Alexa Event Gateway sind es z.B. nur 10 Minuten. Deshalb sollte man damit umgehend das Refresh-Token erzeugen, denn mehr braucht man nicht um Access Token zu generieren. Vielleicht ist es bei HomeConnect anders. Man benötigt natürlich einen neuen Code wenn man die Berechtigungen (Scope) erweitern will.

                      https://www.oauth.com/oauth2-servers...rization-code/
                      Zuletzt geändert von jonofe; 04.11.2018, 09:42.

                      Kommentar


                        #56
                        Zitat von coliflower Beitrag anzeigen
                        Wenn sich aber im Nachhinein, zB der SCOPE oder STATE ändert, dann muss ein neuer CODE erzeugt werden, da der "alte" CODE ja unter anderen Umständen erstellt wurde.
                        Eigentlich habe ich keine Änderungen durchgeführt -> muss ich weiter beobachten !
                        Danke für Eu´re Hilfe !

                        Kommentar


                          #57
                          Richtig, auch bei HC hat man 10 Minuten um den CODE anzuwenden ...
                          Meine neue Version des 70er LBS wird zukünftig den CODE automatisch lesen, in JSON speichern und im 70er LBS übernehmen ...
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            #58
                            Zitat von ak68 Beitrag anzeigen
                            muss ich weiter beobachten
                            Bitte / danke.
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              #59
                              Zitat von coliflower Beitrag anzeigen
                              Meine neue Version des 70er LBS wird zukünftig den CODE automatisch lesen, in JSON speichern und im 70er LBS übernehmen ...
                              Um sicher zu gehen, dass das RefreshToken auch innerhalb der 10 Minuten abgerufen wird, würde ich dies im Callback Skript machen, d.h. im hc.php. Dort kannst du dann das Refresh-Token in die Datei für den LBS schreiben.

                              Kommentar


                                #60
                                Zitat von jonofe Beitrag anzeigen
                                Um sicher zu gehen, dass das RefreshToken auch innerhalb der 10 Minuten abgerufen wird ...
                                Danke für den Hinweis :-)
                                Der LBS ist bereits seit gestern in Umbau ... Der zukünftige LBS wird die hc.php anlegen, den Autorisationslink starten, nach Freigabe durch den User, den Code in eine JSON speichern und danach wird der Code von LBS übernommen und die bereits vorhandene Routine für den ACCESS-/REFRESH-token in der KLASSE starten.
                                Zuletzt geändert von coliflower; 04.11.2018, 11:08.
                                Danke und LG, Dariusz
                                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                                Kommentar

                                Lädt...
                                X