slogan3

Ontwerp een OAuth 2.0 Flow voor Geavanceerde Scope Validatie en Toegangscontrole

description

Met deze prompt kun je een geavanceerde OAuth 2.0 flow ontwerpen die niet alleen standaard scopes gebruikt, maar ook dynamische validatie toepast op basis van gebruikerskenmerken en API-toegangsregels. Hierdoor verbeter je de beveiliging en flexibiliteit van je API-integraties aanzienlijk, en voorkom je ongeautoriseerde toegang op een fijnmaziger niveau dan standaard scopes bieden.

prompt

Help me een OAuth 2.0 authenticatie- en autorisatiestroom te ontwerpen die geavanceerde scope validatie en toegangscontrole ondersteunt. Beschrijf hoe ik scopes kan valideren op basis van combinatie van gebruikersattributen en API-eindpuntvereisten. Mijn API type: <voer het type API in> Gebruikersattributen: ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een gedetailleerd ontwerp voor een OAuth 2.0 authenticatie- en autorisatiestroom met geavanceerde scope-validatie en toegangscontrole voor jouw RESTful API: 1. OAuth 2.0 Flow en Tokentype: - Gebruik de Authorization Code Flow met Proof Key for Code Exchange (PKCE) voor extra beveiliging. - Implementeer korte levensduur tokens (bijvoorbeeld 5-15 minuten) en gebruik refresh tokens met beperkingen (bijvoorbeeld beperkte scope of IP-adres). 2. Scope Validatie op Basis van Gebruikersattributen en API-eindpuntvereisten: - **Scope-definitie:** Definieer scopes zoals `write:all`, `read:all`, etc. - **User-attributen:** Bewaar gebruikersrollen (`admin`, `editor`, `gebruiker`) in je identity provider (IdP) of user directory. - **Validatieproces:** - Bij het verkrijgen van een access token: - Validatie van de scope-aanvraag: controleer of de scope overeenkomt met de toegestane scopes voor de gebruiker. - Neem de gebruikersattributen mee in het token (bijvoorbeeld via claims in JWT). - Bij API-aanroepen: - Ontleed het JWT-token en haal de claims op. - Controleer of de scope in het token overeenkomt met de vereiste scope voor het eindpunt. - Controleer gebruikersattributen: - Bijvoorbeeld, voor `/admin/*`, moet `role=admin` aanwezig zijn. 3. Toegangscontrole voor Specifieke Eindpunten: - **Voor `/admin/*`:** - Controleer of: - `role=admin` aanwezig is in de claims. - Scope `write:all` is verleend. - Alleen toegang verlenen als beide voorwaarden voldaan zijn. 4. Beveiligingsvereisten en Tokenbeheer: - **Korte tokenlevensduur:** - Stel de access token TTL in op 5-15 minuten. - **Refresh tokens met beperkingen:** - Beperk refresh tokens tot hetzelfde client, IP-adres, en scope. - Implementeer revocation mechanismen voor refresh tokens. - **Gebruik van Proof Key for Code Exchange (PKCE):** - Versterk de authorization code flow tegen code interceptie. 5. Best Practices voor Implementatie: - **Claims en Scope Binding:** - Implementeer claims in JWT die zowel de gebruikersattributen als scopes bevatten. - **Authorisatie Middleware:** - Gebruik middleware in je API om statisch en dynamisch toegangsbeleid te controleren. - **Scope en Attribute Validatie:** - Voer scope-validatie uit op API-niveau, niet alleen bij token-uitgifte. - **Least Privilege:** - Geef alleen de minimale benodigde scopes en attributen aan tokens. - **Auditing en Logging:** - Log toegangspogingen, vooral mislukte pogingen voor kritieke eindpunten. - **Secure Storage en Transmissie:** - Gebruik HTTPS voor alle communicatie. - Sla tokens veilig op en voorkom lekken. - **Regelmatige Review:** - Controleer en update scopes, roles en toegangsregels regelmatig. 6. Samenvatting: - Ontwerp een OAuth 2.0 flow met korte tokens en strikte refresh token beperkingen. - Voeg gebruikersattributen toe als claims in het access token. - Pas middleware toe voor scope- en attributenvalidatie per eindpunt. - Implementeer aanvullende beveiligingsmaatregelen zoals PKCE en logging. Door deze aanpak te volgen, zorg je voor een veilige en flexibele authenticatie- en autorisatiestructuur die nauwkeurig scope-validaties en toegangscontrole op basis van gebruikersattributen mogelijk maakt.
provider: deepseek
model: deepseek-chat
Zeker, ik help je bij het ontwerpen van een robuust OAuth 2.0-autorisatiesysteem. Hier is een complete implementatiegids: ## OAuth 2.0 Stroomdesign **Aanbevolen stroom:** Authorization Code Flow met PKCE - **Client** → Authorization Server: Authorization Request met scopes - **Gebruiker** → Authenticatie en scope-toestemming - **Authorization Server** → Issue Authorization Code - **Client** → Exchange code voor tokens (access + refresh) ## Scope Validatie Architectuur ### 1. Scope-definitie Matrix ```json { "scopes": { "write:all": { "required_attributes": ["admin"], "endpoint_access": ["/admin/*"], "description": "Volledige schrijftoegang" }, "write:limited": { "required_attributes": ["editor", "admin"], "endpoint_access": ["/content/*"], "description": "Beperkte schrijftoegang" }, "read:all": { "required_attributes": ["gebruiker", "editor", "admin"], "endpoint_access": ["/*"], "description": "Leestoegang voor alle resources" } } } ``` ### 2. Token Uitgifte Validatie ```javascript function validateScopeRequest(requestedScopes, userAttributes) { const grantedScopes = []; requestedScopes.forEach(scope => { const scopeConfig = scopeDefinitions[scope]; if (scopeConfig && scopeConfig.required_attributes.some( attr => userAttributes.includes(attr))) { grantedScopes.push(scope); } }); return grantedScopes; } ``` ## API Eindpunt Validatie Middleware ```javascript const scopeMiddleware = (requiredScope) => { return (req, res, next) => { const tokenScopes = req.auth.scopes; const userRole = req.auth.attributes.role; const requestedEndpoint = req.path; // Dubbele validatie: scope + attribuut if (!tokenScopes.includes(requiredScope)) { return res.status(403).json({ error: "Insufficient scope" }); } // Endpoint-specifieke autorisatie if (requestedEndpoint.startsWith('/admin/') && userRole !== 'admin') { return res.status(403).json({ error: "Admin access required" }); } next(); }; }; ``` ## Beveiligingsimplementatie ### Token Configuratie - **Access Token Levensduur:** 15-30 minuten - **Refresh Token Levensduur:** 7 dagen - **Refresh Token Restricties:** - Gebonden aan client ID - Eénmalig gebruik (rotation verplicht) - IP-binding optioneel ### Refresh Token Beheer ```javascript const refreshTokenService = { issueRefreshToken: (userId, clientId) => { const token = crypto.randomBytes(40).toString('hex'); // Opslaan met: userId, clientId, expiry, used flag return token; }, validateRefreshToken: async (token, clientId) => { // Controleer geldigheid, client binding en usage status const isValid = await db.refreshTokens.findOne({ token, clientId, used: false, expiresAt: { $gt: new Date() } }); return isValid; } }; ``` ## Best Practices voor Implementatie ### 1. Defense in Depth - **JWT Signing:** RS256 asymmetrische signing - **Token Introspection:** Endpoint voor token validatie - **Rate Limiting:** Voor auth endpoints en token requests ### 2. Scope Management ```javascript // Dynamische scope validatie const dynamicScopeValidator = { validate: (requestedScope, userAttributes, endpoint) => { const scopeRules = scopeRegistry[requestedScope]; return scopeRules.attributes.some(attr => userAttributes.includes(attr)) && scopeRules.endpoints.some(pattern => endpoint.match(new RegExp(pattern))); } }; ``` ### 3. Audit Logging - Log alle scope requests en toewijzingen - Track token usage per endpoint - Monitor mislukte autorisatiepogingen ### 4. Beveiligingsheaders ``` Strict-Transport-Security: max-age=31536000 X-Content-Type-Options: nosniff X-Frame-Options: DENY ``` ## Implementatie Checklist 1. [ ] JWT signing met RSA 2048+ keys 2. [ ] Scope-claim in access tokens 3. [ ] Refresh token rotation implementeren 4. [ ] Token revocation endpoint 5. [ ] Uitgebreide error handling 6. [ ] Regular expression voor endpoint matching 7. [ ] Gebruikersattribuut cache voor performance 8. [ ] Rate limiting per client ID ## Monitoring en Onderhoud - Implementeer token usage analytics - Review scope-toewijzingen regelmatig - Automatiseer key rotation - Conduct regelmatige security audits Deze architectuur biedt een evenwicht tussen veiligheid en flexibiliteit, met uitgebreide validatiemogelijkheden op basis van zowel scopes als gebruikersattributen.