Bug: POST /token nepřijímá http basic auth
-
Dobrý den,
omlouvám se, moje chyba, problém nebyl v content-type, ale v těle požadavku.Stejně ale dost práce to s pomocí next-auth (5.0.0-beta.18) / oauth4webapi (2.10.4) rozchodit.
- pokus neposílal client_id a client_secret v těle požadavku, ale http auth v hlavičce
POST https://login.szn.cz/api/v1/oauth/token
Accept: application/json
Authorization: Basic ZTQzMzY0ZmYz....
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: oauth4webapi/v2.10.4redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fseznam&code_verifier=uHUSlWlHaWHsJ_AC6xMwjuIFADi4vq3tUuuhHV3gDIM&code=2%7CjIznFzf8xPUbN1BSVwBHUFVRRQ5BWhNSNzATEGA9Zn0Sib9K5XZeKl8o3A_zaX0lSqDVkJinXp7AYZ26yjOUC3Q&grant_type=authorization_code
Odpověď: 400 BAD REQUEST
error { error: 'invalid_grant', message: 'client_id mismatch' }- pokus, přesvědčil jsem oauth4webapi, že bude posílat client_id a client_secret v těle požadavku (token_endpoint_auth_method: 'client_secret_post')
POST https://login.szn.cz/api/v1/oauth/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: oauth4webapi/v2.10.4redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fseznam&code_verifier=2i1gAkMk_tEE3954bEupAfxuKP4Lvm4zksV_M1A-_78&code=2%7CjIznFzfKyvUbN1BSVwBHUFVRRQ5BWhNSNyICA1UcZn0SbPQlwuhuGhwnKA2s-StuZMifJ8-2RLi9uxqlWEoUAV8&grant_type=authorization_code&client_id=e43364ff312f884661189efd84d3716b83206d7cac0f7ddb&client_secret=...
Odpověď: 400 BAD REQUEST
error { error: 'invalid_grant' }- pokus, přesvědčil jsem next-auth, že nebude používat PKCE, ale obyčejný state verifier
POST https://login.szn.cz/api/v1/oauth/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: oauth4webapi/v2.10.4redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fseznam&code_verifier=auth&code=2%7CjIznFzfCy_UbN1BSVwBHUFVRRQ5BWhNSNx8OKVkoZn0S-D0VlrkcYPqpKSgfsVTrwGT_n9qds5YWQCKHRkt6ig8&grant_type=authorization_code&client_id=e43364ff312f884661189efd84d3716b83206d7cac0f7ddb&client_secret=...
Odpověď: 200 OK
Takto už mi to funguje bez zásahů do knihoven
Stejně by nebylo špatné, kdyby Vaše strana uměla přijímat client_id a client_secret jako http basic auth. I ten PKCE verifier (https://datatracker.ietf.org/doc/html/rfc7636) by se hodil.Děkuji a zdravím,
David O -
Hezky den,
jsem rad, ze vam to uz funguje.
Co se tyce podpory Authorization hlavicky, tam to moc dobre nevidim - je to vlastne uz treti mechanismus prijmu techto dat (vedle JSONu a x-www-form-urlencoded) a nejsem si jisty, jak velky uzitek to prinasi.
PKCE ve skutecnosti podporujeme, ale narazil jste na chybu nasi implementace. Zjistil jsem, ze code_challenge ukladame v okamziku, kdy se uzivatel prihlasi (zada jmeno a heslo). Pokud k nam na overeni posilate jiz prihlaseneho uzivatele, tak nedojde k ulozeni code_challenge a tim padem ani k naslednemu overeni code_verifier. Asi to muzete experimentalne overit tim, ze zapnete PKCE a pokusite se o prihlaseni v anonymnim okne prohlizece.
Zkusim to vyhledove nejak napravit a vyresit.
S pozdravem
Ondrej Zara -
...vydali jsme opravu PKCE. S trochou štěstí už by vám tato varianta nyní také měla fungovat. Pokud ne, pošlete prosím zase ukázku nějakých failujících požadavků.
-
Dobrý den,
děkuji, že se tomu věnujetePKCE mi bohužel nefunguje ani u přihlášeného uživatele, ani u nepřihlášeného uživatele v anonymním okně.
Code Challange Method je S256 (SHA256). Knihovna, kterou používám, code challenge v plaintextu neumí....
POST https://login.szn.cz/api/v1/oauth/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: oauth4webapi/v2.10.4redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fseznam&code_verifier=VyVtetPZUei4rN_nXbyzMP26Cx-X2-QolXgqTXHDJ0o&code=2%7CjIznFzeftf4bN1BSVwBHUFVRRQ5BWhNSNwwYGXUOZn0SQ2QljliMtivjMCeQt0dpw-7C5_LANglnA8TgpgGWsGo&grant_type=authorization_code&client_id=e43364ff312f884661189efd84d3716b83206d7cac0f7ddb&client_secret=...
Odpověď: 400 BAD REQUEST
error { error: 'invalid_grant' }HTTP Basic Auth asi není moc důležitý, hodil by se k tomu, že ho některé knihovny ho používají jako default. Třeba oauth4webapi, kterou používá knihovna next-auth. Tato metoda (client_secret_basic) je uvedená v dokumentaci OAuth (https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#token-endpoint-auth-method).
Je to v zásadě jednoduché, posílá se se base64(client_id + ":" + client_secret)
Kdyby byl client_id 123 a client secret 456, poslalo by se base64("123:456"), tedy
Authorization: Basic MTIzOjQ1Ng==Děkuji,
David O -
Dobry den,
omlouvam se za pozdni odpoved, nemel jsem ted bohuzel cas se PKCE venovat. Nyni jiz mam - ale za tak dlouho zpetne nemam potrebne logy. Pokud byste chtel, muzete se pokusit o autorizaci vcetne code_challenge (a nasledne code_verifier) a dat mi vedet, jaky den a v kolik hodin jste to zkousel. Projdu logy a podivam se.
Hned na prvni pohled:
base64.urlsafe_b64encode(sha256("VyVtetPZUei4rN_nXbyzMP26Cx-X2-QolXgqTXHDJ0o".encode()).digest())
b'22heX1LKL-OJyVhBwXaojWm_FOVdyiTThkjqPxZpegY='...a ve vasem pozadavku s code_challenge nevidim ten padding (rovnitko) na konci. Ale definitivneji to budu moct rozhodnout jen pohledem do logu.
-
...a ve vasem pozadavku s code_challenge nevidim ten padding (rovnitko) na konci
zadne tam byt nema, RFC 7636 jasne definuje S256 code_challenge_method pouzivajic "Base64url Encoding" jako "with all trailing '=' characters omitted"
-
Ahoj máš Jak 🥰
-
Ahoj máš Jak 🥰 David
-
Dobrý den, mohu se zeptat jak přesně se vám podařilo nastavit Auth.js (NextAuth). Mám pravděpodobně stejný problém, ale nepodařilo se mi podle Vašeho třetího pokusu nastavit providera v Auth.ts . Děkuji
-
Dobrý ten, tady je provider file, který používám:
https://github.com/deltazero-cz/next-auth/blob/main/packages/core/src/providers/seznam.ts
V configu pro Auth potom:
...
providers: [Seznam({ clientId: process.env.SEZNAM_CLIENT_ID, clientSecret: process.env.SEZNAM_CLIENT_SECRET, scope: 'identity,contact-phone,avatar', profile: (profile) => { ... }, }),
...
]
...A šlape to dobře