slogan3

description

Met deze prompt kan de gebruiker een geavanceerd JWT-beleid ontwerpen dat multi-factor authenticatie integreert, waardoor de beveiliging aanzienlijk wordt verhoogd zonder de gebruikerservaring te schaden. Het behandelt unieke aspecten zoals token claims en sessiebeheer in combinatie met MFA, wat niet wordt gedekt door bestaande prompts.

prompt

Help me een JWT-beleid te ontwerpen dat multi-factor authenticatie (MFA) integreert in mijn API. Mijn API-type: <voer het type API in, bijvoorbeeld REST of GraphQL>. Mijn MFA-vereisten: <beschrijf welke MFA-methoden je wilt integreren, zoals sms-codes, authentica ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Het ontwerpen van een JWT-beleid dat MFA integreert in je REST API vereist een doordachte aanpak om veiligheid en gebruiksvriendelijkheid te balanceren. Hieronder vind je een gedetailleerd advies: 1. **Authenticatieproces met MFA integreren:** - **Stap 1: Initiële login** Een gebruiker voert inloggegevens in (bijvoorbeeld gebruikersnaam en wachtwoord). - Na succesvolle verificatie wordt een JWT uitgegeven met basisclaims (bijvoorbeeld `sub`, `iat`, `exp`), maar **zonder** dat de MFA-verificatie is voltooid. - Voeg een claim toe, zoals `"mfa_verified": false`. - **Stap 2: MFA-uitdaging** Afhankelijk van de gekozen MFA-methode (authenticator-app of SMS), wordt de gebruiker gevraagd de MFA-code in te voeren. - Voor authenticatie-apps wordt een TOTP-code gebruikt. - Voor SMS wordt een éénmalige code gestuurd. - **Stap 3: Verificatie van MFA-code** Na succesvolle MFA-verificatie wordt een **nieuw** JWT uitgegeven of het bestaande token geüpdatet: - Zet de claim `"mfa_verified": true`. - Overweeg een korte vervaltijd voor het token dat niet MFA-verified is, of gebruik aparte tokens voor MFA-status. 2. **JWT-aanpassingen en beveiliging:** - **Claims:** - `"sub"`: gebruikers-ID - `"iat"` en `"exp"`: tijdstempels voor validiteit - `"mfa_verified"`: boolean, geeft aan of MFA is voltooid - `"auth_methods"`: (optioneel) lijst van gebruikte MFA-methoden - **Token validatie:** - Bij elke API-aanroep controleer je of `"mfa_verified"` op `true`. - Indien niet, vereist de API dat de gebruiker eerst de MFA-verificatie voltooit. 3. **Validatie en sessiebeheer:** - **Kortere token-leeftijden voor niet-MFA-verificatie:** Gebruik korte TTL's voor tokens zonder MFA, zodat de gebruiker snel moet verifiëren. - **Refresh tokens:** - Overweeg het gebruik van refresh tokens om nieuwe access tokens te verkrijgen nadat MFA is voltooid. - Bij het gebruik van refresh tokens, moeten deze ook MFA-vereisten kunnen bevatten. - **Token invalidatie:** - Houd een blacklist of token-revocation lijst bij, vooral als MFA-vereisten wijzigen of de gebruiker uitlogt. 4. **Gebruikerservaring optimaliseren:** - **Gestage MFA-proces:** - Vraag MFA alleen op wanneer het nodig is (bijvoorbeeld bij een nieuw apparaat, gevoelige acties). - Gebruik "remember me"-opties met langere MFA-verificatie voor vertrouwde apparaten. - **Minimaliseer vertraging:** - Bied snelle en eenvoudige MFA-methoden (bijvoorbeeld push-meldingen of authenticator-apps). - Voor SMS, zorg voor snelle verzending en duidelijke instructies. - **Transparantie:** - Informeer gebruikers duidelijk wanneer MFA vereist is en waarom. - Geef opties voor het instellen of aanpassen van MFA-methoden. 5. **Best practices:** - **Gebruik HTTPS** om tokens en MFA-codes te beveiligen. - **Beperk de geldigheid van tokens** om risico's te minimaliseren. - **Implementeer secure storage** van geheime keys en MFA-instellingen. - **Audit en monitor** authenticatie- en MFA-activiteiten. - **Voorzie in fallback-opties** zoals backup codes voor gebruikers die geen toegang hebben tot hun MFA-methode. **Samengevat:** Gebruik een twee-stappen authenticatieproces waarbij het eerste JWT zonder MFA-verified claim wordt uitgegeven, gevolgd door een MFA-verificatie die een nieuw, MFA-geverifieerd JWT uitgibt. Controleer deze claim bij elke API-aanroep en optimaliseer de gebruikerservaring door MFA-invoermethoden te kiezen die snel en gebruiksvriendelijk zijn, zonder afbreuk te doen aan de beveiliging.
provider: deepseek
model: deepseek-chat
Zeker, hier een gedetailleerd JWT-beleid met MFA-integratie voor je REST API: ## JWT Claims Structuur voor MFA ```json { "sub": "gebruikers-id", "iss": "jouw-api", "iat": 1620000000, "exp": 1620003600, "mfa_verified": true, "mfa_method": "authenticator_app", "mfa_timestamp": 1620000000, "amr": ["pwd", "mfa"] } ``` ## Token Flow met MFA ### Stap 1: Eerste Authenticatie - Gebruiker logt in met gebruikersnaam/wachtwoord - JWT wordt uitgegeven met `mfa_verified: false` - Token heeft korte levensduur (5-10 minuten) ### Stap 2: MFA Verificatie ```json // Pre-MFA Token { "sub": "user123", "mfa_verified": false, "mfa_required": true, "scope": "mfa_pending" } ``` ### Stap 3: Post-MFA Token ```json { "sub": "user123", "mfa_verified": true, "mfa_method": "sms", "amr": ["pwd", "mfa"], "scope": "full_access" } ``` ## Implementatie Strategie ### 1. Token Generatie ```javascript // Na succesvolle MFA function generateMFAToken(user, mfaMethod) { const payload = { sub: user.id, mfa_verified: true, mfa_method: mfaMethod, mfa_timestamp: Date.now(), amr: ['pwd', 'mfa'], exp: Math.floor(Date.now() / 1000) + (60 * 60) // 1 uur }; return jwt.sign(payload, secret); } ``` ### 2. Token Validatie Middleware ```javascript function requireMFA(req, res, next) { const token = req.headers.authorization?.split(' ')[1]; const decoded = jwt.verify(token, secret); if (!decoded.mfa_verified) { return res.status(403).json({ error: "MFA_VERIFICATION_REQUIRED", message: "Multi-factor authenticatie vereist" }); } // Controleer MFA timestamp (max 24 uur oud) const mfaAge = Date.now() - decoded.mfa_timestamp; if (mfaAge > 24 * 60 * 60 * 1000) { return res.status(403).json({ error: "MFA_SESSION_EXPIRED", message: "MFA sessie verlopen, herverificatie vereist" }); } next(); } ``` ## Beveiligingsmaatregelen ### 1. Token Beveiliging - **Korte levensduur**: 1-4 uur voor MFA-verified tokens - **Refresh tokens**: Aparte lange-leven tokens voor sessiebeheer - **Token intrekking**: Bij MFA-methode wijziging of verdachte activiteit ### 2. MFA Specifieke Bescherming ```javascript // Rate limiting voor MFA-pogingen const mfaAttempts = new Map(); function checkMFARateLimit(userId) { const attempts = mfaAttempts.get(userId) || []; const recentAttempts = attempts.filter(time => Date.now() - time < 15 * 60 * 1000 // 15 minuten ); if (recentAttempts.length >= 5) { throw new Error("Te veel MFA pogingen"); } mfaAttempts.set(userId, [...recentAttempts, Date.now()]); } ``` ## Gebruikerservaring Optimalisatie ### 1. Geavanceerd Sessiebeheer ```javascript // "Remember this device" functionaliteit function generateDeviceToken(deviceId) { return { device_id: deviceId, trusted: true, mfa_grace_period: 30 // dagen }; } // Trusted devices krijgen langere MFA-sessies function getMFASessionDuration(isTrustedDevice) { return isTrustedDevice ? 30 * 24 * 60 * 60 * 1000 : // 30 dagen 24 * 60 * 60 * 1000; // 24 uur } ``` ### 2. Geleidelijke MFA Prompts - **Laag-risico acties**: Geen MFA vereist (bijv. profiel bekijken) - **Medium-risico**: MFA na 8 uur inactiviteit - **Hoog-risico**: Altijd MFA (bijv. wachtwoord wijzigen, betalingen) ### 3. MFA Methoden Beheer ```javascript // Gebruiker kan voorkeursmethode instellen const userMFAPreferences = { primary: "authenticator_app", fallback: "sms", backup_codes: ["code1", "code2"] }; ``` ## Best Practices ### 1. Beveiliging - **Encryptie**: JWT payload encryptie voor gevoelige claims - **Audit logging**: Log alle MFA-gerelateerde gebeurtenissen - **Device fingerprinting**: Voor betere sessiebeveiliging ### 2. Gebruikerservaring - **Progressieve disclosure**: Toon alleen benodigde MFA-stappen - **Fallback opties**: SMS als backup voor authenticator app - **Clear messaging**: Duidelijke foutmeldingen en statusupdates ### 3. Technische Overwegingen - **Stateless design**: Houd MFA status in JWT, niet server-side - **Scalability**: Gebruik distributed caching voor rate limiting - **Compliance**: Zorg dat logging voldoet aan privacywetgeving ## API Endpoints Voorbeeld ``` POST /auth/login → Eerste authenticatie POST /auth/mfa/verify → MFA verificatie POST /auth/mfa/refresh → MFA sessie verlengen DELETE /auth/mfa/sessions → Sessie intrekken GET /auth/mfa/methods → Beschikbare MFA methoden ``` Dit beleid biedt een robuuste basis voor MFA-integratie terwijl de gebruikerservaring geoptimaliseerd blijft. Pas de sessieduren en MFA-vereisten aan op basis van je specifieke security-behoeften en gebruikersgemak.