DEV Community

Alim Mohammad
Alim Mohammad

Posted on

Token Types Explained πŸ”‘

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)