autentizace přes jwt token, prodloužení expirace rubrika: Programování: Jiné

7 maryo
položil/-a 4.11.2014

Zdravím. Chtěl jsem být jakože IN a implementovat autentizaci přes JWT, ale když nad tím tak přemýšlím, řikám si, jestli to má vůbec smysl.
Otázku jsem formuloval na StackOverflow, ale nikdo mi zatim neopověděl, tak posílám link jestli tu náhodou nebudu úspěšnější, nechce se mi to celý přepisovat.

http://stackoverflow.com/questions/26739167/jwt-json-web-token-automatic...

Použil jste případně někdo JWT a řešil podobnej problém? Případně zavrhnul ho?

Komentáře

  • maryo : I když... Ono je to vlastně jedno, ať se ty tokeny generujou třeba po každym requestu nový, stejně jich je nekonečně mnoho a když se podepíšou.... 4.11.2014
odkaz
5 Nehalem
odpověděl/-a 6.11.2014

Já to používám následovně:
Pro správnou funkci je zapotřebí implementace "odhlašování",
tzn. když uživatel na klientovi řekne odhlásit, nesmaže to pouze jeho token z aplikace klienta (jelikož je stále aktivní),
ale do REDISU tento token nastaví se zbylou expirací tohoto tokenu (takže se sám pak vymaže).

Když se někdo chce přihlásit pod tímto odhlášeným tokenem, je při requestu middleware, kontrolující existenci tokenu v REDIS
expirační DB, jestliže tam existuje, vrátí 401.

Btw. expiraci tokenu si zapisuji přímo do tokenu pod EXP. Cpu tam moment().add()...)

Dále, co se týká refresh. Když přijde token, který má nastaveno "rememberme" třeba hodnotou v tokenu, tak při requestu zkontroluji,
jestli token neexpiroval a jestli je doba menší než 1/10 celkové doby expirace.

Jestliže ano, vygeneruji do response token nový, kde si klient tento nový token uloží zpět do aplikace.

Ve zkratce:

  • Když přijde validní token s větší expirací jak 1/10 celkové expirační doby a nemá remember me, nedostane nový token v response.
  • Když přijde validní token s větší expirací jak 1/10 celkové expirační doby a MÁ remember me, nedostane nový token v response.
  • Když přijde validní token s menší expirací jak 1/10 celkové expirační doby a MÁ remember me, DOSTANE nový token v response.

Na generaci nových tokenů není nic špatného, ale mělo by se podchytit (jak říkáš v dotazu) jeho korektní logout po dobu jeho platnosti.

Komentáře

  • maryo : Dík za odpověď. Ale jaká je potom tedy ta výhoda toho tokenu pokud si je budu na serveru ukládat a řešit odhlašování jak píšeš oroti tomu, že by se tomu tokenu jen prodlužovala platnost a generoval se novej až při novém přihlášení (+ případně při otevření/zavření browseru)? Ostaně generovat nový při každém requestu si stejně nemůžu dovolit, dělal jsem benchmark a podepsání toho tokenu pomocí SSL a RSA klíče trvá cca 50 až 200ms, což je stejně prostě moc na to, abych ho generoval s každym requestem. BTW 1/10 expirační doby sice není ideální, ale zní to jako asi docela dobrej kompromis oproti tomu refresh tokenu (jak to řeší to auth0). 8.11.2014

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.