Versions Compared

Key

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

...

Standaard zal een aanvraagmodule gebruik maken van OpenId Connect (op basis van authorization code grant) in kader van geauthenticeerde formulieren. Hoewel dit geen probleem vormt voor een formulier dat in stand-alone modus getoond wordt kan dit problemen veroorzaken in embedded modus.

Om Single Sign-on vanuit Mijn Burgerprofiel naar een formulier via een aangesloten aanvraagmodule te garanderen maken we gebruik van Token Exchange. Op deze manier zal Mijn Burgerprofiel de beschikbare gebruikerscontext beschikbaar stellen via een OAuth Access Token specifiek gescoped voor de aanvraagmodule.

Gebruikerscontext doorgeven aan een aanvraagmodule

Om de gebruikerscontext door te geven aan een aanvraagmodule moet het OAuth Access Token - verkregen via de voorgaande Token Exchange - worden doorgegeven vanuit Mijn Burgerprofiel. Gezien de gevoeligheid van het OAuth Access Token moet dit altijd via een server-to-server operatie verlopen. De server-to-server operatie verloopt volgens onderstaande API specificatie en moet resulteren in een tijdelijk, éénmalig te gebruiken token.

Info

Opmerking: Mijn Burgerprofiel zal gebruik maken van de Client ID vermeld in de Formulieren API response om de “audience” claim correct in te stellen tijdens het Token Exchange proces.

Swagger integration
docExpansionlist
{
  "openapi": "3.0.2",
  "info": {
    "title": "Aanvraagmodule - SSO Token",
    "version": "1.0"
  },
  "components": {
    "schemas": {
      "RequestToken": {
        "type": "object",
        "required": [
          "token",
          "token_type"
        ],
        "properties": {
          "token": {
            "type": "string",
            "description": "Token ontvangen via IdP Token Exchange"
          },
          "token_type": {
            "type": "string",
            "description": "Type token ontvangen via IdP Token Exchange",
            "enum": [
              "urn:ietf:params:oauth:token-type:access_token"
            ]
          }
        }
      },
      "ResponseTempToken": {
        "type": "object",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "type": "string",
            "description": "Tijdelijk SSO Token"
          }
        }
      },
      "ClientError": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Foutmelding"
          }
        }
      },
      "ServerError": {
        "type": "string"
      }
    }
  },
  "servers": [
    {
      "description": "TNI",
      "url": "https://burgerprofiel.tni-vlaanderen.be"
    },
    {
      "description": "Productie",
      "url": "https://www.burgerprofiel.be"
    }
  ],
  "paths": {
    "/auth/v1/token": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestToken"
              }
            },
            "application/x-www-form-urlencoded": {
              "schema": {
                "$ref": "#/components/schemas/RequestToken"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Vraagstelling is geaccepteerd en een tijdelijk token werd gegenereerd",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseTempToken"
                }
              }
            }
          },
          "400": {
            "description": "Vraagstelling ontbreekt verplichte velden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientError"
                }
              }
            }
          },
          "401": {
            "description": "Ongeldig of vervallen token in de vraagstelling",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientError"
                }
              }
            }
          },
          "500": {
            "description": "Onverwacht probleem opgetreden in de applicatie bij het verwerken van het token",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/ServerError"
                }
              }
            }
          }
        }
      }
    }
  }
}

...

Tot slot moet het tijdelijk token worden doorgegeven als query parameters via de formulier URL. Een aantal voorbeelden van dit type URL's:De exacte waarde die gebruikt zal worden voor de query parameter naam dient door te stromen via de Formulieren API specificatie.

  • Voorbeelden:

    • https://formulier.vlaanderen.be/f6d35977-f45d-4710-befc-21e2812d83ea?token=<TEMP-TOKEN>

Verwerken van het token in de aanvraag module

Wanneer de aanvraagmodule een token ontvangt dient men volgende stappen uit te voeren:

Indien aan alle voorgenoemde voorwaarden is voldaan zal de aanvraagmodule een nieuwe sessie opstarten op basis van de gebruikerscontext beschikbaar gesteld via het OAuth Access Token.

Anchor
bijlage-mbp-client-id
bijlage-mbp-client-id
Bijlage - Mijn Burgerprofiel Client-ID

...