Bug: POST /token nepřijímá http basic auth
-
Dobrý den,
dle specifikace OAuth 2.0 by metoda POST /token měla přijímat data v typu application/x-www-form-urlencoded (RFC 6749, sekce 4.1.2.)Zde v dokumentaci máte uvedený JSON, s tím to také funguje. Není to ale v souladu se standardem a rozchodit to s knihovnou next-auth, vůbec najít, v čem byla chyba, dalo dost práce

Možná by to mohlo umět přijímat oba formáty.
Děkuji,
David O -
Dobrý den,
mohu se optat, co přesně se stane, pokud data pošlete v application/x-www-form-urlencoded? Na první pohled mi přijde, že by to mělo fungovat -- a pokud nefunguje, pokusím se zařídit, aby fungovalo. Potřebuji k tomu však vědět, kdy přesně se pokoušíte, jak vypadá tělo/hlavičky požadavků a z jaké IP adresy tak činíte.
-
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ěnujete
PKCE 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

Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Registrovat Přihlásit se