1. Access Token
What it is: A short-lived token (usually 15-30 mins) that grants access to protected endpoints.
User logs in β Gets access token β Uses it for 30 mins β Token expires β Must login again
Problem: User has to login again every 30 minutes! π€
2. Refresh Token (π To Implement)
What it is: A long-lived token (days/weeks) used ONLY to get new access tokens.
Why needed: Better user experience - they stay logged in without re-entering password.
Flow:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β LOGIN β
β ββββββ β
β User sends email + password β
β β β
β Server returns: β
β β’ access_token (expires in 30 min) β
β β’ refresh_token (expires in 7 days) β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β USING THE API (for 30 mins) β
β βββββββββββββββββββββββββββ β
β User sends: Authorization: Bearer β
β Server: β
Allowed β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ACCESS TOKEN EXPIRES (after 30 mins) β
β βββββββββββββββββββββββββββββββββββββ β
β User sends: Authorization: Bearer β
β Server: β 401 Unauthorized - Token expired β
β β
β User sends: POST /api/v1/users/refresh β
β Body: {"refresh_token": "..."} β
β Server: β
Returns NEW access_token (valid for another 30 min) β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β REFRESH TOKEN EXPIRES (after 7 days) β
β βββββββββββββββββββββββββββββββββββββ β
β User must LOGIN AGAIN with email + password β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. Grant Token (OAuth2 Concept)
What it is: Part of the OAuth2 "Authorization Code Flow" - used when logging in via Google, GitHub, etc.
You probably DON'T need this unless you're implementing "Login with Google".
Flow:
User clicks "Login with Google"
β
Google shows consent page
β
User approves
β
Google redirects back with a "grant code"
β
Your server exchanges grant code for access_token
Top comments (0)