Hi all,
I'm just started with JWT and it looks very promising!
I have backend (npm) and frontend (angular2) too. When the user logs in I create a JWT and send it to frontend. I use your angular2-jwt module to store the token in localStorage.
So user uses the webpage without any issues and then suddenly he gets an error telling him his token is expired. This is valid, because, lets say, he logged in 2 hours ago and the JWT is configured to expire after 2 hours. But in the meantime the user used the website so the JWT should have been continuously updated with an expiry time of "last activity + 2 hours".
Am I right? If so, how would you do that?
Thank you!
@papaiatis some questions to understand context:
@ziluvatar
Thanks!
The token expiration is checked each time the user initiates an ajax request back to the server.
Who checks that? frontend or backend?
Frontend: You may not need that, just keep in your js code a "timer", it gets restarted/checked on every action (timer > exp - iat (or custom claim saying 2 hours) => force login)
Backend: You would need to renew the token and send it back on each server action (cookie? header?)
renew the token: maybe with something like: https://github.com/auth0/node-jsonwebtoken/pull/172
Who checks that? frontend or backend?
Actually both. In frontend I'm using this module: https://github.com/auth0/angular2-jwt which checks the token on each request. In backend, I check it manually.
Thanks for the tip, I'll take a look at the mentioned issue ASAP.
Sorry for the late reply. So I ended up creating a "renew token" API endpoint which I call when my angular 2 application starts up and then every 5 minutes. The server then returns me back a renewed token which I store in local storage.
Thanks for letting us know your final solution!
@papaiatis
@ziluvatar
Requesting new token from client-side in your case Angularjs will cause swquirty issue.
If your token gets leaked your application may get compromised completely.
And if we provide the functionality to the client to request fresh token it will allow an attacker to use the token for an indefinite time. And this will make the exp value of 2hours in token useless.
From security perspective, the token should be pushed from the server site instead of client-side to
so that if your valid token gets leaked attacker can not use the same token for more than exp time here it is 2 hrs.
I'm not sure how can we do it as it will conflict with the stateless property of JWT.