Autor Zpráva
Marley007
Profil
Zdravím plánuju programovat API pro komunikaci s databází - a pro zjednodušení chci využít autorizační tokeny :)   - token bude složenej ze jména, hesla, aplikačního klíče a časového razítka. ten token bych rád uložil do databáze a nastavil mu určitou platnost, po dobu platnosti by uživatel mohl pomocí tokenu přistupovat k tomu API. Po vypršení platnosti by se odstranil z databáze. Teď jen přemýšlím nad tím, jestli je správný postup ty tokeny dávat do databáze a při každém requestu ověřovat jeho platnost, aby nedošlo k zahlcení serveru. Dík všem za rady a zkušenosti :)
Alphard
Profil
Ukládání do databáze je správný postup.

token bude složenej ze jména, hesla, aplikačního klíče a časového razítka
Tohle už se mi nezdá. Jakého hesla? Heslo by v něm být nemělo, jméno tam asi není třeba a tím časovým razítkem si také moc jistý nejsem.
Marley007
Profil
Dobrá, z čeho by se tedy měl skládat ten token, aby to bylo správně :) v některých API se skládá právě z hashe uživatelského jména, hesla a pak nějaký náhodný string - např. datum a čas. Tak jsem přemýšlel, že by to tak mělo být :) ale rád se něčemu přiučím.
Alphard
Profil
Heslo je tajný údaj, to se nesmí zbytečně ukládat ani posílat po síti (ani jako hash). Po přihlášení (ověření hesla) by měla být vygenerována dostatečně dlouhá a náhodná sekvence, která bude nadále sloužit jako token (a které nenese žádnou informaci o původním hesle). Jestli k tomu přilepíte nějaký časový údaj a jméno uživatele je otázka návrhu.

Druhou věcí je vygenerování dostatečně náhodného tokenu. Snad by šla použít openssl_random_pseudo_bytes raději než prosté mt_rand, nicméně prý je pomalá a prakticky nepoužitelná na Windows. Touto oblastí se příliš nezabývám, takže se neodvažuji doporučit konkrétní metodu generování tokenů. Ale je možné, že vám bude stačit rand :-)
Marley007
Profil
Abychom si správně rozuměli, tak popíšu, jak bych si celý proces představoval.

Klient serveru pošle požadavek na autorizaci (POST), který bude obsahovat jméno, heslo (hash) a klíč aplikce.
Server porovná zaslané údaje s údaji v databázi a vygeneruje autorizační token (ten teda v tuto chvíli nevím z čeho)
Token se uloží do databáze společně s něajkou dobou platnosti (např. 1 hodina)
Token se zašle uživateli, který pomocí něj bude vykonávat další dotazy.
Ty další dotazy by se skládaly z uživatelského jména a tokenu a následně by se ověřovaly na straně serveru (jestli jsou v databázi a jestli jsou platné).

Je toto správné řešení, nebo jsem úplně mimo :D
Alphard
Profil
Marley007:
Je toto správné řešení
Ano.

Jen teda nevím, jak se liší práce s původním heslem a pozdějším tokenem. Pokud je obojí přenášeno stejným kanálem a obsluhováno stejnou aplikací, je otázka, jestli má smysl heslo a token oddělovat.
Marley007
Profil
Také nad tím přemýšlím :) respektive jsem teprve ve fázi, kdy vymýšlím vůbec nějaké funkční řešení. Mám databázi, do které sahá několik aplikací, což je neefektivní a co se mi opravdu nelíbí. Chci proto vytvořit nějaké API, které bude poskytovat přístup k databázi. Tzn. že např. mobilní aplikace zavolá svou serverovou část, které odešle nějaká data a ta serverová část je pošle skrze API do databáze. Nyní nastává ovšem otázka, jak to nějak jednoduše, ale účinně zabezpečit, aby to nebylo jen tak...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0