Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

JWT best practices — JSON Web Tokens správně

01. 01. 2024 1 min čtení intermediate

JWT je všude — ale špatně implementovaný JWT je horší než žádný. ‘None’ algoritmus, klíče v kódu, tokeny bez expirace.

Bezpečné vytvoření

import jwt from datetime import datetime, timedelta def create_token(user_id, role): return jwt.encode({ ‘sub’: user_id, ‘role’: role, ‘iss’: ‘myapp’, ‘aud’: ‘myapp-api’, ‘exp’: datetime.utcnow() + timedelta(minutes=15), }, PRIVATE_KEY, algorithm=’RS256’) def verify_token(token): return jwt.decode(token, PUBLIC_KEY, algorithms=[‘RS256’], # ⚠️ Explicitně! issuer=’myapp’, audience=’myapp-api’)

Typické chyby

  • alg: none — nepodepsaný token přijat
  • HS256 se sdíleným secret
  • Token bez expirace
  • Citlivá data v payloadu (JWT není šifrovaný!)
  • Token v localStorage (zranitelný XSS)

Refresh token rotation

@app.post(‘/api/refresh’) async def refresh(request): old_refresh = request.cookies.get(‘refresh_token’) payload = verify_refresh_token(old_refresh) invalidate_refresh_token(old_refresh) # Rotation! new_access = create_access_token(payload[‘sub’]) new_refresh = create_refresh_token(payload[‘sub’]) response = JSONResponse({‘access_token’: new_access}) response.set_cookie(‘refresh_token’, new_refresh, httponly=True, secure=True, samesite=’strict’) return response

Klíčový takeaway

RS256, explicitní algoritmus, krátká expirace, refresh token rotation. JWT je podpis, ne šifrování.

securityjwtautentizaceapi