slogan3

description

Met deze prompt kan ik een op maat gemaakte JWT-authenticatie ontwerpen die past bij mijn API-beveiligingsbehoeften. Het helpt me specifieke parameters zoals gebruikersrollen en tokenlevensduur te definiëren, waardoor mijn authenticatieproces veiliger en efficiënter wordt. Bovendien leer ik hoe ik refresh tokens verantwoord kan inzetten, wat mijn gebruikers een betere ervaring geeft zonder de veiligheid in gevaar te brengen. Dit is beter dan generieke oplossingen omdat het mijn unieke behoeften adresseert.

prompt

Help me met het ontwerpen van een veilige JWT-authenticatie flow voor mijn API waarbij ik de volgende parameters gebruik: Gebruikersrol: <voer de gebruikersrol in waarvoor je authenticatie wilt ontwerpen> Token Levensduur: <voer de gewenste levensduur ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een veilige JWT-authenticatie flow voor jouw API met de door jou gespecificeerde parameters, inclusief suggesties voor refresh tokens: 1. Inloggen en initiële token-uitgifte: - Gebruiker logt in met geldige inloggegevens. - Server valideert de gegevens en genereert een JWT met de volgende claims: - `sub`: gebruikers-ID - `role`: "admin" - `iat`: timestamp van uitgifte - `exp`: timestamp van verval (15 minuten na uitgifte) - Sign de token met HS256 en een geheime sleutel. 2. Refresh token genereren: - Bij succesvolle login wordt ook een refresh token gegenereerd, bijvoorbeeld een cryptografisch veilige random string. - Dit refresh token wordt samen met de gebruiker en andere metagegevens (zoals vervaltijd, gebruiker-ID) opgeslagen in een veilige database. 3. Tokengebruik: - Voor elke API-aanvraag stuurt de gebruiker de JWT in de Authorization-header (`Bearer <token>`). - Server valideert de JWT: - Controleert de handtekening met HS256. - Controleert de vervaltijd. - Controleert de rol (is "admin"). - Bij geldige token wordt toegang verleend. 4. Refresh token gebruiken: - Wanneer de JWT is verlopen, kan de gebruiker een verzoek doen om een nieuwe JWT te verkrijgen door het refresh token te sturen. - Server valideert het refresh token: - Controleert of het bestaat en niet is ingetrokken. - Controleert of het niet is verlopen. - Bij validatie genereert de server een nieuwe JWT met dezelfde parameters en een nieuwe vervaltijd van 15 minuten. - Optioneel: Implementeer een mechanisme om refresh tokens te herroepen, bijvoorbeeld bij verdachte activiteiten. 5. Veiligheidsmaatregelen: - Bewaar refresh tokens veilig (bijvoorbeeld in een beveiligde database en niet in de frontend). - Gebruik HTTPS om token-overdracht te beveiligen. - Implementeer mechanisme voor het intrekken van refresh tokens indien nodig. - Beperk het aantal refresh-aanvragen per gebruiker om misbruik te voorkomen. 6. Extra tips: - Overweeg het gebruik van rotatie van refresh tokens: bij elke refresh wordt een nieuw refresh token uitgegeven en het oude ingetrokken. - Voeg extra claims toe aan de JWT indien nodig, zoals `jti` (JWT ID) voor identificatie en herroeping. Door deze flow te implementeren, zorg je voor een balans tussen gebruiksgemak en veiligheid, waarbij refresh tokens zorgen voor een naadloze gebruikerservaring zonder de beveiliging in gevaar te brengen.
provider: deepseek
model: deepseek-chat
Hier is een veilige JWT-authenticatieflow voor uw API met de opgegeven parameters: ## Basis JWT-configuratie ```javascript const jwt = require('jsonwebtoken'); const SECRET_KEY = process.env.JWT_SECRET; // Minimaal 256-bit geheime sleutel // Token generatie const generateAccessToken = (userId) => { return jwt.sign( { sub: userId, role: 'admin', iat: Math.floor(Date.now() / 1000) }, SECRET_KEY, { algorithm: 'HS256', expiresIn: '15m' } ); }; ``` ## Refresh Token Implementatie ```javascript const refreshTokens = new Map(); // Gebruik database in productie // Refresh token genereren (30 dagen geldig) const generateRefreshToken = (userId) => { const refreshToken = jwt.sign( { sub: userId, type: 'refresh' }, SECRET_KEY, { expiresIn: '30d', algorithm: 'HS256' } ); // Opslaan in database met gebruikerID en expiry refreshTokens.set(refreshToken, { userId: userId, expires: Date.now() + 30 * 24 * 60 * 60 * 1000 }); return refreshToken; }; // Token refresh endpoint app.post('/refresh', (req, res) => { const { refreshToken } = req.body; if (!refreshToken || !refreshTokens.has(refreshToken)) { return res.status(401).json({ error: 'Ongeldige refresh token' }); } try { const decoded = jwt.verify(refreshToken, SECRET_KEY); const newAccessToken = generateAccessToken(decoded.sub); res.json({ accessToken: newAccessToken }); } catch (error) { res.status(403).json({ error: 'Refresh token verlopen' }); } }); ``` ## Beveiligingsmaatregelen 1. **HTTPS altijd** - Alle token-transport over HTTPS 2. **HttpOnly Cookies** - Bewaar refresh tokens in HttpOnly cookies 3. **Token Blacklisting** - Implementeer logout functionaliteit 4. **Rate Limiting** - Beperk login- en refresh-pogingen 5. **Secret Rotation** - Regelmatig JWT secret wijzigen ## Authenticatie Middleware ```javascript const authenticateToken = (req, res, next) => { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (!token) return res.status(401).json({ error: 'Toegang geweigerd' }); jwt.verify(token, SECRET_KEY, (err, user) => { if (err) return res.status(403).json({ error: 'Ongeldige token' }); // Role-based access control if (user.role !== 'admin') { return res.status(403).json({ error: 'Onvoldoende rechten' }); } req.user = user; next(); }); }; ``` ## Logout Functionaliteit ```javascript app.post('/logout', (req, res) => { const { refreshToken } = req.body; refreshTokens.delete(refreshToken); res.json({ message: 'Uitgelogd' }); }); ``` Deze implementatie biedt een balans tussen gebruiksvriendelijkheid (naadloze sessieverlenging) en veiligheid (korte access token levensduur, propere token invalidatie).