Fórum pro vývojáře
    • Kategorie
    • Nepřečtené
    • Nejnovější
    • Populární
    • World
    • Přihlásit se

    Chyba při implementaci

    Scheduled Připnuto Uzamknuto Přesunuto OAuth přihlášení přes Seznam
    11 Příspěvky 3 Přispěvatelé 43 Zobrazení
    Načítání více příspěvků
    • Od nejstarších po nejnovější
    • Od nejnovějších po nejstarší
    • S nejvíce hlasy
    Odpovědět
    • Odpovědět jako Téma
    Přihlásit se pro odpověď
    Toto téma bylo odstraněno. Jen uživatelé s oprávněním správy témat ho mohou vidět.
    • dockal.devD Offline
      dockal.dev
      naposledy upravil Administrátor

      Dobrý den,
      chtěl bych implementovat Seznam přihlášení, ale narážim na problém se získáním access tokenu z "code"

      Někdy dostanu chybu hned po vygenerování kodu

      {
          "message": "ticket expired",
          "status": 466
      }
      

      a někdy zase

      {"error": "invalid_grant"}
      

      Děkuji za reakci.

      1 odpověď Poslední odpověď Odpovědět Citovat 0
      • Ondřej ŽáraO Offline
        Ondřej Žára
        naposledy upravil

        Hezky den,

        "ticket expired" znamena, ze jste se pokusil ziskat token prilis pozde. Platnost jednorazoveho kodu je casove vyznamne omezena (na cca 10-15 vterin).

        Chyba "invalid_grant" muze byt zpusobena vice vecmi - idealni by bylo, kdybyste mohl ukazat cely pozadavek, co posilate (samozrejme s cenzurovanym client_id a client_secret) a my to overime.

        dockal.devD 1 odpověď Poslední odpověď Odpovědět Citovat 0
        • dockal.devD Offline
          dockal.dev @Ondřej Žára
          naposledy upravil Administrátor

          Request je vygenerovaný postmanem

          curl --location --request POST 'https://login.szn.cz/api/v1/oauth/token' \
          --header 'Content-Type: application/json' \
          --data-raw '{
              "grant_type": "authorization_code",
              "code": "xx",
              "redirect_uri": "http://localhost",
              "client_secret": "xxx",
              "client_id": "xxx"
          }'
          

          první odpověď je invalid_grant a po cca 15s je ticket expired

          Díky

          Ondřej Žára 0O 1 odpověď Poslední odpověď Odpovědět Citovat 0
          • Ondřej Žára 0O Offline
            Ondřej Žára 0 @dockal.dev
            naposledy upravil

            Dobry den,

            prijde mi, ze problem je ne-identicke redirect_uri v pozadavcich na /auth a /token. Tyto retezce musi byt stejne -a jestli se divam do spravneho logu, tak v jednom pripade jej zadavate s lomitkem na konci a ve druhem bez.

            1 odpověď Poslední odpověď Odpovědět Citovat 0
            • dockal.devD Offline
              dockal.dev
              naposledy upravil

              Dobrý den, zkusil jsem snad všechny ruzný možnosti, stále stejný problém. {"error": "invalid_grant"}

              Nemůžete do dokumentace přidat funkční example ? Už prakticky netuším co dělám špatně.

              Díky

              Ondřej ŽáraO 1 odpověď Poslední odpověď Odpovědět Citovat 0
              • Ondřej ŽáraO Offline
                Ondřej Žára @dockal.dev
                naposledy upravil

                Dobry den,

                kdyz pisete "vsechny ruzny moznosti", co konkretne tim myslite? Spravne by mela existovat presne jedna hodnota redirect_uri, kterou pouzijete na trech mistech. Za prve v registraci aplikace na vyvojari.seznam.cz, za druhe jako parametr pri presmerovani na /auth, za treti jako parametr pri volani /token. Delate to tak? A s jakou hodnotou redirect_uri?

                Ondřej ŽáraO dockal.devD 2 odpovědí Poslední odpověď Odpovědět Citovat 0
                • Ondřej ŽáraO Offline
                  Ondřej Žára @Ondřej Žára
                  naposledy upravil

                  Podival jsem se jeste do logu na vas problem. Hodnotu redirect_uri (mam ted na mysli metodu /token) posilate url-enkodovanou, coz je chybne.

                  Fakticky pak selze porovnani "http://localhost:3000/" (to jste poslal do /auth) vs. "http%3A%2F%2Flocalhost%3A3000" (to jste poslal do /token).

                  Data je nutna escapovat s ohledem na pouzitou serializaci. Kdyz serializujete algoritmem "application/x-www-form-urlencoded" (tj. dvojice klic=hodnota), pak musite provadet url-enkodovani. Kdyz serializujete algoritmem JSON, pak musite provadet escapovani specificke pro JSON (a zadne jine).

                  Ondřej ŽáraO dockal.devD 2 odpovědí Poslední odpověď Odpovědět Citovat 0
                  • Ondřej ŽáraO Offline
                    Ondřej Žára @Ondřej Žára
                    naposledy upravil Administrátor

                    Pro uplnost: JSON data posilana do /token maji vypadat:

                    {
                      "redirect_uri": "http://localhost:3000/",
                      ...
                    }
                    
                    1 odpověď Poslední odpověď Odpovědět Citovat 0
                    • dockal.devD Offline
                      dockal.dev @Ondřej Žára
                      naposledy upravil

                      Dobrý den, tím myslím že jsem zkoušel více variant url, s lomítkem, bez lomítka, enkodovanou a neenkodovanou

                      Existuje jen jedna hodnota pro redirect ? V nastavení jde povolit více 🙂

                      1 odpověď Poslední odpověď Odpovědět Citovat 0
                      • dockal.devD Offline
                        dockal.dev @Ondřej Žára
                        naposledy upravil

                        Zkoušel jsem více variant (ve stejný čas, určite to v logu je videt), zkusím tedy znova.

                        1 odpověď Poslední odpověď Odpovědět Citovat 0
                        • dockal.devD Offline
                          dockal.dev
                          naposledy upravil

                          Tak už jsem to rozjel, díky za pomoc! 🙂

                          1 odpověď Poslední odpověď Odpovědět Citovat 0
                          • First post
                            Last post