Autor | Zpráva | ||
---|---|---|---|
Marley007 Profil |
#1 · Zasláno: 5. 7. 2015, 20:59:16
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 |
#2 · Zasláno: 5. 7. 2015, 21:08:40
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 |
#3 · Zasláno: 5. 7. 2015, 21:17:58
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 |
#4 · Zasláno: 5. 7. 2015, 21:55:28
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 |
#5 · Zasláno: 5. 7. 2015, 21:58:18
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 |
#6 · Zasláno: 5. 7. 2015, 22:09:51
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 |
#7 · Zasláno: 5. 7. 2015, 22:15:01
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...
|
||
Časová prodleva: 10 let
|
0