Help me bij het implementeren van API-verzoekvalidatie in mijn Kong API Gateway
description
Door verzoekvalidatie te implementeren, kan ik de beveiliging en betrouwbaarheid van mijn API-diensten verbeteren, en voorkomen dat ongeldige gegevens mijn toepassing beïnvloeden.
prompt
try_prompt
Help me bij het opzetten van een robuuste validatiestrategie voor mijn Kong API Gateway. Mijn API-eindpunten zijn: {{api_endpoints}}. Ik wil de vol ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je een robuuste validatiestrategie kunt opzetten voor je Kong API Gateway, gericht op het valideren van het email-parameter bij het endpoint /gebruikers, inclusief methoden voor het afhandelen van ongeldige verzoeken.
1. Gebruik Kong Plugins voor Validatie
--------------------------------------
Kong biedt standaard plugins zoals de **Request Validator** en de **OpenAPI Spec Validator**. Voor meer controle kun je ook een **Lua plugin** schrijven of een bestaande plugin gebruiken.
2. Validatie met de Request Validator Plugin
---------------------------------------------
- Maak een JSON Schema dat de validatie van het email-veld definieert.
- Voeg deze schema toe aan je API of route.
Voorbeeld JSON-schema voor email:
```json
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
}
},
"required": ["email"]
}
```
Implementatie in Kong:
- Ga naar je API of route.
- Voeg de Request Validator plugin toe.
- Stel het schema in via de configuratie.
3. Validatie met een Custom Lua Plugin
--------------------------------------
- Schrijf een Lua plugin die het request intercepteert.
- Controleer of de parameter 'email' aanwezig is en of deze voldoet aan een regex of Lua's `mail` library.
- Als de validatie faalt, stuur een 400 Bad Request.
Voorbeeld Lua code:
```lua
local args = ngx.req.get_uri_args()
local email = args["email"]
if not email or not ngx.re.match(email, "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$") then
return ngx.status = 400
ngx.say("Ongeldig email adres")
return ngx.exit(ngx.HTTP_BAD_REQUEST)
end
```
4. Afhandelen van Ongeldige Verzoeken
-------------------------------------
- Zorg dat je validatie altijd eindigt met een `return ngx.exit(ngx.HTTP_BAD_REQUEST)` bij invaliditeit.
- Hiermee wordt het verzoek onmiddellijk afgebroken en krijgt de client een 400 statuscode.
5. Testen
---------
- Test met geldige en ongeldige email-adressen.
- Controleer dat ongeldige verzoeken een 400 error teruggeven.
6. Samenvatting
----------------
- Gebruik de Request Validator plugin met een JSON-schema voor basisvalidatie.
- Voor meer complexe validatie, overweeg een eigen Lua plugin.
- Zorg dat je validatiestappen altijd eindigen met een 400 response bij fouten.
Wil je dat ik een volledige voorbeeldconfiguratie voor Kong voor je opstel?
provider: deepseek
model: deepseek-chat
Hier is een robuuste validatiestrategie voor je Kong API Gateway voor het eindpunt `/gebruikers` met e-mailvalidatie:
## 1. Kong Plugin Configuratie
Installeer de `request-validator` plugin via Admin API:
```bash
curl -X POST http://localhost:8001/services/{service-name}/plugins \
--data "name=request-validator" \
--data "config.version=draft4" \
--data "config.parameter_schema={\"type\":\"object\",\"required\":[\"email\"],\"properties\":{\"email\":{\"type\":\"string\",\"format\":\"email\"}}}"
```
## 2. Alternatief: Custom Plugin (Aanbevolen)
Maak een custom Lua plugin voor betere controle:
**`/usr/local/share/lua/5.1/kong/plugins/email-validator/handler.lua`**
```lua
local BasePlugin = require "kong.plugins.base_plugin"
local EmailValidator = BasePlugin:extend()
function EmailValidator:new()
EmailValidator.super.new(self, "email-validator")
end
function EmailValidator:access(conf)
EmailValidator.super.access(self)
local email = kong.request.get_query().email
-- Controleer of email parameter aanwezig is
if not email then
return kong.response.exit(400, {
message = "Email parameter is verplicht",
error = "MISSING_EMAIL"
})
end
-- E-mail validatie regex
local email_pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+%.[a-zA-Z]{2,}$"
if not string.match(email, email_pattern) then
return kong.response.exit(400, {
message = "Ongeldig e-mailformaat",
error = "INVALID_EMAIL_FORMAT",
received = email
})
end
end
return EmailValidator
```
## 3. Plugin Schema
**`/usr/local/share/lua/5.1/kong/plugins/email-validator/schema.lua`**
```lua
return {
no_consumer = true,
fields = {
custom_message = { type = "string", default = "Validatie mislukt" }
}
}
```
## 4. Kong Configuratie
Voeg toe aan je `kong.conf`:
```ini
plugins = bundled,email-validator
```
## 5. Activeer de Plugin
```bash
curl -X POST http://localhost:8001/services/{service-name}/plugins \
--data "name=email-validator"
```
## 6. Docker Compose Voorbeeld
```yaml
version: '3.8'
services:
kong:
image: kong:latest
environment:
KONG_PLUGINS: bundled,email-validator
volumes:
- ./plugins:/usr/local/share/lua/5.1/kong/plugins
```
## 7. Test de Validatie
```bash
# Geldig verzoek
curl "http://localhost:8000/gebruikers?email=test@example.com"
# Ongeldig verzoek - geen email
curl "http://localhost:8000/gebruikers"
# Ongeldig verzoek - foutief email
curl "http://localhost:8000/gebruikers?email=ongeldig-email"
```
## 8. Response Voorbeelden
**Succes:**
```json
{
"status": 200,
"message": "Verzoek verwerkt"
}
```
**Fout:**
```json
{
"message": "Ongeldig e-mailformaat",
"error": "INVALID_EMAIL_FORMAT",
"received": "ongeldig-email"
}
```
Deze strategie zorgt voor:
- ✅ Verplichte email parameter
- ✅ E-mailformaat validatie
- ✅ Automatische 400 errors voor ongeldige verzoeken
- ✅ Duidelijke foutmeldingen
- ✅ Eenvoudige implementatie en onderhoud

