Přihlašování uživatelů ve veřejném API
- nanuqcz
- Člen | 822
Ahoj,
budu teď dělat pro jeden projekt veřejné API pro přístup k datům. Co
zatím ale neumím správně vyřešit, je přihlašování uživatelů.
Moje myšlenka je taková:
- Uživatel pošle (třeba metodou POST) přihlašovací údaje na url třeba /api/auth/login.
- Já ho v presenteru normálně přihlásím pomocí
$this->user->login($user, $pass)
. - Pokud je přihlášení úspěšné, tak mu jako autorizační token
vrátím
SESSION_ID
. - Uživatel bude při každém požadavku posílat svůj token…
- A já ten token zase zpátky šoupnu do
SESSION_ID
, aby Nette načetlo dříve přihlášeného uživatele a fungovaly mi metody jako$user->isAllowed(...)
apod.
Problém je, že Nette mi nedovolí manipulovat se SESSION_ID. Jaký je tedy správný postup generování autorizačního tokenu, a poté v aplikaci „přeměna“ z tokenu na přihlášeného uživatele?
Díky moc za odpovědi.
- Tharos
- Člen | 1030
Doporučil bych vyhnout se všem nestandardním řešením (například takovému, jaké jsi popsal) a namísto toho použít standardní OAuth.
V REST API si klient jasně daným způsobem obstará token, který poté přikládá k requestům na nějakým způsobem chráněné resources. Ty se podle toho tokenu pak na serveru jen rozhodneš, zda lze ona chráněná data vrátit v response, anebo zda jde o nějaký Bad Request (4xx).
Doplnění: U trojpilířového OAuth máš token svázaný
s konkrétním uživatelem, kterého si pak můžeš interně v aplikaci
označit za přihlášeného (pro ten jeden životní cyklus aplikace) a pak
můžeš volně používat zmíněnou isAllowed
metodu a další.
Session v REST API vůbec nemusíš startovat (dokonce je lepší vyloženě ji
nestartovat).
Editoval Tharos (24. 2. 2015 10:26)
- nanuqcz
- Člen | 822
Nevím, jestli jsi mě úplně pochopil… Já nemám problém udělat klienta. Já mám problém, jak autorizovat uživatele pomocí tokenu na serveru. Pokud se bavíme o klasické webové aplikaci (ne API) a klient je webový prohlížeč, tak se autorizace dříve přihlášeného uživatele děje automaticky pomocí hodnoty uložené v $_COOKIE[‚SESSION_ID‘]. Já ale nechci nutit REST klienta používat cookies, a tak u mě vzniká problém, jak autentizaci (již dříve přihlášeného uživatele) ošéfovat bez cookies na serveru.
Editoval nanuqcz (24. 2. 2015 5:28)
- echo
- Člen | 134
OAuth knihovničky:
server: http://oauth2.thephpleague.com/
client: https://github.com/…auth2-client
- Filip Procházka
- Moderator | 4668
- přijmeš token
- vytáhneš uživatele podle tokenu, nemusíš vůbec volat
->login($jmeno, $heslo)
, můžeš tam rovnou předat identitu
$user->login(new Identity($id, $data, ...))
- profit