Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

Disclaimer: Deze pagina’s worden regelmatig bijgewerkt zodat ze altijd de meeste recente informatie bevatten. Aarzel niet om feedback te geven mochten er aanpassingen nodig zijn.

Probleemstelling

Bij een aanvragen-integratie in Wanneer een aanvraagformulier wordt geïntegreerd met Mijn Burgerprofiel wordt een iframe getoond met daarin een aanvraag die , gehost wordt door het extern loket. Afhankelijk van de vereisten voor het formulier, zijn cookies mogelijk nodig ( om een gebruikerssessie bij te houden, persistentie aan te bieden binnen het formulier, … ).

De afgelopen jaren hebben leggen browsers echter steeds meer beperkingen gelegd op het gebruik van cookies, zeker in “Third Party” context (wanneer cookies bijgehouden worden voor een domein dat niet hetzelfde is als third-party context. Het gaat dan om een cookies voor een domein anders dan het domein van de zichtbare website).

Als het een aanvraagformulier cookies moet kunnen bijhouden om correct te functioneren, en het formulier is gehost op een URL die niet onder https://burgerprofiel.be valt, dan zullen veel browsers de verwachte cookies niet opslaan.

Info

Voor een gedetailleerd overzicht van wat

...

third-party cookies zijn en hoe verschillende browsers ermee omgaan, zie ook https://web.archive.org/web/20220817000041/https://clearcode.cc/blog/browsers-first-third-party-cookies/.

Oplossing

...

: first-party cookies a.d.h.v. een domein-alias (voorkeur)

De meeste beperkingen zijn niet van toepassing wanneer cookies gezet worden op hetzelfde domein als de actieve website worden gezet. Subdomeinen vallen onder dezelfde regels.

De aanbevolen oplossing houdt in dat het loket een CNAME-alias krijgt onder *.formulieren.burgerprofiel.be. De formulieren die in de API gedefinieerd worden, moeten dan dat domein gebruiken voor de embed-link.

Info

Als onderdeel van uw aansluitingsdossier zal deze alias eenmalig vastgelegd wordenDeze alias wordt eenmalig vastgelegd in het aansluitingsformulier. De loketapplicatie die het aanvraagformulier host, moet dan ook correct omgaan met de afgesproken alias.

...

Oplossing:

...

third-party cookie API-endpoint (alternatief)

Als de bovenstaande aanpak geen optie is (vanwege bijv. door technische beperkingen), dan bieden we alsnog een alternatief aanis er dit alternatief: door specifieke API-endpoints te voorzien ( en mee te geven in de Forms-API), kunnen we kan er in Mijn Burgerprofiel eerst kijken worden gekeken of er cookies op uw domein gezet kunnen worden gezet. Als

Is dat niet mogelijk is ( omdat de browser Third Party Cookies blokkeert) third-party cookies blokkeert, dan tonen we in Mijn Burgerprofiel een relevante foutboodschap, en . We verwijzen de burger gebruiker door naar het externe loket (= de fallback-link van de aanvraag).

:

Info

Lees meer over de configuratie van de fallback-link.

...

Technische invulling

Het loket voorziet (als onderdeel van de forms API die sowieso voorzien moet worden) een endpoint /api/v1/third-party-cookies. Het endpoint moet publiek zijn (want zal geen Authorization headers binnenkrijgen).

...

  1. kijken of de aanvraag een thirdPartyCookieApi link heeft

  2. een POST doen naar het geconfigureerde endpoint

  3. een GET doen naar het geconfigureerde endpoint

  4. de relevante UI tonen aan de gebruiker

    1. de foutboodschap met doorverwijzing indien er een endpoint is geconfigureerd in stap 1, en stap 2 of 3 een fout geven

    2. de geconfigureerde aanvraag indien er geen endpoint is geconfigureerd, of stap 2 en 3 zonder problemen werden uitgevoerd

API-definitie van het endpoint om te implementeren

...

Swagger integration
docExpansionlist
{
  "openapi": "3.0.2",
  "info": {
    "title": "Aanvraagmodule - Third Party Cookie endpoint",
    "version": "1.0"
  },
  "components": {
    "schemas": {
      "ServerError": {
        "type": "string"
      }
    }
  },
  "servers": [
    {
      "description": "Form provider",
      "url": "https://formulier.vlaanderen.be"
    }
  ],
  "paths": {
    "/auth/v1/third-party-cookies": {
      "post": {
        "responses": {
          "200": {
            "description": "Request is geregistreerd en cookie wordt ahv response header gezet",
            "headers": {
              "Set-Cookie": {
                "description": "Een cookie naam en waarde die in GET request gecontroleerd kunnen worden. De cookie moet SameSite=None directive hebben, en minstens 30 seconden geldig zijn.",
                "schema": {
                  "type": "string"
                },
                "example": "cookie-available=true; SameSite=None; httponly; secure"
    },
            }
          },
          "500": {
            "description": "Onverwacht probleem opgetreden in de applicatie bij het aanmaken van cookie"
          }
        }
      },
      "get": {
        "responses": {
          "200": {
            "description": "Cookie dat gezet is door POST is aanwezig in request",
          },
          "404": {
            "description": "Cookie dat gezet is door POST is niet aanwezig in request (dus browser blokkeert het opslaan van cookies voor dit domein)"
          }
        }
      }
    }
  }
}