API toegang vanuit internet configureren
Deze handleiding beschrijft hoe u SQLio API's veilig toegankelijk maakt vanaf internet of buiten uw netwerk. Dit wordt gerealiseerd door een reverse proxy in de DMZ te plaatsen die verkeer doorstuurt naar de interne SQLio server.
Wat wordt gepubliceerd:
/api/*)/api-login)/api-docs/*)Wat wordt NIET gepubliceerd:
/login)Het onderstaande schema toont de aanbevolen netwerkarchitectuur:
| Van | Naar | Poort | Protocol |
|---|---|---|---|
| Internet | Externe Firewall | 443 | HTTPS |
| Externe Firewall | DMZ (Reverse Proxy) | 443 | HTTPS |
| DMZ (Reverse Proxy) | Interne Firewall | 5000 | HTTP |
| Interne Firewall | SQLio Server | 5000 | HTTP |
| Pad | Beschrijving | Authenticatie |
|---|---|---|
/api-login |
Login pagina voor externe gebruikers | Geen (publiek) |
/api-docs/* |
Swagger/OpenAPI documentatie | Swagger login cookie |
/api/* |
REST API endpoints | Basic Auth + API Key |
/swagger/* |
Swagger JSON specificaties | Swagger login cookie |
| Firewall | Richting | Bron | Doel | Poort |
|---|---|---|---|---|
| Extern | Inbound | Any (Internet) | DMZ Server | 443 |
| Intern | Inbound | DMZ Server | SQLio Server | 5000 |
Installeer de benodigde IIS modules op de DMZ server:
https://www.iis.net/downloads/microsoft/application-request-routingiisreset
https://www.iis.net/downloads/microsoft/url-rewriteiisreset
| Veld | Waarde |
|---|---|
| Site name | SQLio-API |
| Physical path | C:\inetpub\wwwroot\sqlio-api |
| Binding Type | https |
| Port | 443 |
| Host name | api.uwdomein.nl |
| SSL certificate | Uw publieke SSL-certificaat |
Maak de fysieke map aan:
mkdir C:\inetpub\wwwroot\sqlio-api
Maak een web.config bestand aan in C:\inetpub\wwwroot\sqlio-api:
SQLIO-SERVER door de hostname of het IP-adres van uw interne SQLio server.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- API Login pagina doorsturen -->
<rule name="SQLio API Login" stopProcessing="true">
<match url="^api-login$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/api-login" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST"
value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PROTO"
value="https" />
</serverVariables>
</rule>
<!-- API Docs (Swagger UI) doorsturen -->
<rule name="SQLio API Docs" stopProcessing="true">
<match url="^api-docs(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/api-docs{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST"
value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PROTO"
value="https" />
</serverVariables>
</rule>
<!-- Swagger JSON specs doorsturen -->
<rule name="SQLio Swagger JSON" stopProcessing="true">
<match url="^swagger/(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/swagger/{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST"
value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PROTO"
value="https" />
</serverVariables>
</rule>
<!-- API endpoints doorsturen -->
<rule name="SQLio API Proxy" stopProcessing="true">
<match url="^api/(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/api/{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST"
value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PROTO"
value="https" />
</serverVariables>
</rule>
<!-- Blazor resources voor login pagina -->
<rule name="SQLio Blazor Resources" stopProcessing="true">
<match url="^_blazor(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/_blazor{R:1}" />
</rule>
<!-- Framework bestanden -->
<rule name="SQLio Framework Files" stopProcessing="true">
<match url="^_framework/(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/_framework/{R:1}" />
</rule>
<!-- Content bestanden (CSS) -->
<rule name="SQLio Content Files" stopProcessing="true">
<match url="^_content/(.*)$" />
<action type="Rewrite"
url="http://SQLIO-SERVER:5000/_content/{R:1}" />
</rule>
<!-- Blokkeer alle andere paden -->
<rule name="Block Other Paths" stopProcessing="true">
<match url=".*" />
<action type="CustomResponse"
statusCode="403"
statusReason="Forbidden"
statusDescription="Access Denied" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Om de X-Forwarded headers te kunnen instellen:
HTTP_X_FORWARDED_HOSTHTTP_X_FORWARDED_PROTOTest of de verbinding naar de interne server werkt:
curl http://SQLIO-SERVER:5000/api-login
Test de API login pagina vanaf een externe locatie:
curl https://api.uwdomein.nl/api-login
Verwacht resultaat: HTML van de login pagina.
Externe gebruikers komen eerst op de login pagina:
https://api.uwdomein.nl/api-login
Na succesvolle login worden ze doorgestuurd naar de Swagger documentatie:
https://api.uwdomein.nl/api-docs
Controleer dat de beheerinterface NIET toegankelijk is:
curl https://api.uwdomein.nl/login # Verwacht: 403 Forbidden curl https://api.uwdomein.nl/webhook-configuration # Verwacht: 403 Forbidden
Externe gebruikers doorlopen de volgende stappen:
https://api.uwdomein.nl/api-login/api-docsAlle API calls vereisen twee vormen van authenticatie:
| Type | Header | Beschrijving |
|---|---|---|
| Basic Auth | Authorization: Basic {base64} |
Gebruikersnaam en wachtwoord |
| API Key | X-API-Key: {key} |
Unieke API sleutel per gebruiker |
Zorg dat de volgende paden NIET toegankelijk zijn vanaf internet:
/ — Hoofdpagina / beheerinterface/login — Interne inlogpagina (niet te verwarren met /api-login)/webhook-configuration — Webhook configuratie/api-management — API beheer/dataset-configuration — Dataset configuratie/settings — Instellingen/user-management — GebruikersbeheerOorzaken:
Oplossing: Test connectiviteit met curl http://SQLIO-SERVER:5000/api-login vanaf de DMZ server.
Oorzaak: Het pad is correct geblokkeerd door de rewrite rules.
Oplossing: Controleer of u het juiste pad gebruikt (/api-login, /api-docs, of /api/...)
Oorzaken:
/_blazor, /_framework) worden geblokkeerdOplossing: Controleer of alle resource rules in web.config correct zijn geconfigureerd.
Oorzaken:
Oorzaken:
Oplossing: Klik op "Authorize" in Swagger en controleer beide authenticatiemethoden.
C:\inetpub\logs\LogFiles voor gedetailleerde foutmeldingen. SQLio logs vindt u op de interne server.