Autor Zpráva
chikeet
Profil
Zdravím,
stavím REST API pro komunikaci PHP na serveru s desktopovou aplikací na klientovi a hledám jednoduché řešení pro autentizaci/autorizaci.

- API poběží přes https
- Data se budou posílat v JSONu
- Každý klient bude mít přístup jen ke svým datům
- Očekáváme řádově desítky tisíc requestů denně. Requesty můžou být ve skupinách (několik navazujících po sobě) i samostatně (typu "dej mi seznam nějakých entit pro zobrazení uživateli").

Možnosti, které zvažuju:

1) Nabízí se použití OAuth, ale nevím, jestli to nebude moc zvyšovat počet requestů na server (předpokládám, že v prvním requestu se klient přihlásí, pak proběhne ještě nějaké potvrzování a v dalších requestech pak po určitou dobu přistupuje k API)
2) Posílat credentials (apiKey, appSecret, něco na ten způsob) v každém requestu. S tím bude souviset zase vyšší režie kvůli nutnosti přihlášení při každém requestu. Taky si říkám, nakolik je to bezpečné posílat v tom JSONu.
3) Vracet klientovi nějaký vlastní token - jeden request navíc, menší režie pro server. Nejsem si jistá, jestli v tomto případě implementace vlastního řešení není znovuvynalézání kola.

Co od toho chci:
1) Aby to bylo bezpečné. To je určitě plus pro standardní řešení typu OAuth.
2) Co nejnižší nároky na počet requestů a režii na serveru při zpracování jednoho requestu. Tam mi OAuth připadá zase moc koplexní, přinejmenším kvůli počtu requestů.
3) Pokud použiju hotové řešení, aby mělo šanci na nějakou životaschopnost (projekty, které už dva roky nikdo neudržuje, jsou určitě ze hry)

Jaké jsou další možnosti? Zapomněla jsem na nějaký důležitý aspekt? Chápu něco blbě? Za nakopnutí, tipy a zkušenosti budu ráda.
TomášK
Profil
Další možnost je autentizace pomocí klientských certifikátů. S tím je režie administrační - udržování a nastavení certifikátů, ale uvedené požadavky to splňuje dobře. Add 2), pokud bych posílal nějaký token, dal bych ho do hlavičky, ne do JSONu, případně rovnou použil Basic access authentication.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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