Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

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.

Vanuit

Authenticatie via Vlaams Toegangsbeheer

Met Mijn Burgerprofiel maken we gebruik van het Vlaams Toegangsbeheer om authenticatie te faciliteren. Deze component voorziet automatisch single sign-on functionaliteit zodat een burger zich niet telkens opnieuw moet aanmelden in verschillende applicaties. Deze

Op deze pagina leest u hoe een token aan te vragen. Alle details over dat token zijn beschikbaar op Access Token via token exchange.

Beperkingen SSO

De SSO-functionaliteit is gebonden aan enkele deze beperkingen:

  • een beperkte levensduur

  • aanmelden moet in dezelfde browserinstantie

  • geen garantie dat de gebruikerscontext bewaard blijft tussen de verschillende applicaties

Single Sign-on via token

Note

U kunt deze functionaliteit alleen gebruiken als de applicatie waarmee u wilt koppelen, beschikt over een OpenID Connect integratie met het Vlaams Toegangsbeheer.

Om een aantal beperkingen op te lossen bij de klassieke manier waarop single sign-on werkt, gebruiken we Token Exchange om een OAuth Access Token te generen die de Mijn Burgerprofiel-applicatie kan gebruiken om een sessie op te starten.

Vereisten

  • De applicatie moet een trust aanvragen voor de Mijn Burgerprofiel Client-ID (zie Bijlage - Mijn Burgerprofiel Client-ID)

  • Applicatie De applicatie beschikt over ondersteuning voor Token Exchange grant type;

  • Applicatie De applicatie beschikt over ondersteuning voor Client Credential grant type;

Implementatie

Single Sign-on vanuit een applicatie begint door het verkrijgen van een OpenID-Connect Access Token (hierna afgekort als OIDC Access Token) via de authorization code grant. Eenmaal de applicatie beschikt over een De minimale scopes die verplicht zijn om de integratie met Mijn Burgerprofiel goed te laten verlopen zijn profiel en het RRN.

Zodra de applicatie het OIDC Access Token heeft, kan de uitwisseling via de Token Exchange beginnen om een OAuth Access Token te generen welke door dat de Mijn Burgerprofiel-applicatie verwerkt kan wordenverwerken.

Opmerking: de maximum maximale duur van de Mijn Burgerprofiel-applicatieve sessie is gekoppeld aan de resterende tijdsduur van het OIDC Access Token. Om er voor ervoor te zorgen dat de user journey voor een gebruiker zo lang mogelijk is kan men best kan aangemeld blijven, is het aangeraden om eerst een refresh uitvoeren.

Token Exchange

Eenmaal Zodra de applicatie beschikt over een OIDC Access Token heeft, kan er gestart worden om een OAuth Access Token te verkrijgen. Hiervoor maken we gebruik van Token worden aangevraagd via delegatie volgens de Token Exchange RFC. Dit betekent dat men steeds subject en actor token moet meegeven moeten meegegeven worden tijdens de Token Exchange.

Code Block
POST /op/v1/token HTTP/1.1
Host: authenticatie-ti.vlaanderen.be
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:token-exchange
&audience=<MBP-CLIENT-ID>
&subject_token=<OIDC-ACCESS-TOKEN>
&subject_token_type=urn:ietf:params:oauth:token-type:access_token
&actor_token=

...

<OAUTH-ACCESS-TOKEN>
&actor_token_type=urn:ietf:params:oauth:token-type:access_token
&client_id=<APP-CLIENT-ID>
&client_secret=<APP-CLIENT-SECRET>

Naam

Beschrijving

<MBP-CLIENT-ID>

Bevat de Mijn Burgerprofiel Client-ID (zie Bijlage - Mijn Burgerprofiel Client-ID)

.

<OIDC-ACCESS-TOKEN>

OpenID Connect Access Token verkregen door gebruik te maken van authorization code grant of via uitvoeren van refresh

.

<OAUTH-ACCESS-TOKEN>

OAuth Access Token verkregen door gebruik te maken van client credentials grant

<APP-CLIENT-ID>

Client-ID van de applicatie (zie Client Authenticatie voor alternatieven)

.

<APP-CLIENT-SECRET>

Client Secret van de applicatie (zie Client Authenticatie voor alternatieven)

.

Info

Opmerking: in ons code voorbeeld maken we gebruik van het codevoorbeeld gebruiken we een Client-ID en Secret. Echter kan deze Deze informatie kan ook als Basic Authentication toegevoegd worden.

In geval van Bij een asymmetrisch sleutelpaar dient men gebruik te maken van is client assertion nodig. Zie documentatie ook Client Authenticatie voor meer informatie en voorbeelden.

Na het succesvol uitvoeren van Wanneer de Token Exchange zal met succes is uitgevoerd, krijgt de applicatie onderstaand het onderstaande antwoord verkrijgen.:

Code Block
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store

{
  "issued_token_type":"urn:ietf:params:oauth:token-type:access_token",
  "access_token": "ZC5-A1AkXUzXRKb71sAIHBl9F87F18anzEaQy6G6KFD",
  "expires_in": 3600,
  "scope": "profile rrn",
  "token_type": "Bearer"
}

Gebruikerscontext doorgeven aan Mijn Burgerprofiel

Om gebruikercontext de gebruikerscontext door te geven aan Mijn Burgerprofiel dient men moet het OAuth Access Token - verkregen via de voorgaande Token Exchange operatie door te geven- worden doorgegeven. Gezien de gevoeligheid van het OAuth Access Token dient deze steeds moet dit altijd via een server-to-server operatie te verlopen.

Swagger integration
docExpansionlist
{
  "openapi": "3.0.2",
  "info": {
    "title": "Mijn Burgerprofiel - 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"
                }
              }
            }
          }
        }
      }
    }
  }
}

Info

Opmerking: het tijdelijk token dat men verkrijgt via de API-endpoint kan slecht eenmalig maar één keer gebruikt worden. Daarnaast heeft deze ook een heel korte levensduur (ca 2 min) voordat het vervalt.

Als laatste dient men vervolgens het tijdelijk token door te geven

Bovendien vervalt het na ongeveer 2 min.

Tot slot moet het tijdelijk token worden doorgegeven als query parameters van de Mijn Burgerprofiel-URL. Onderstaand alvast enkele Een aantal voorbeelden van zo een URLsdit type URL's:

  • TNI:

    • https://burgerprofiel.tni-vlaanderen.be/?token=<MBP-TEMP-TOKEN>

    • https://burgerprofiel.tni-vlaanderen.be/meldingen?token=<MBP-TEMP-TOKEN>

  • Productie:

    • https://www.burgerprofiel.be/?token=<MBP-TEMP-TOKEN>

    • https://www.burgerprofiel.be/meldingen?token=<MBP-TEMP-TOKEN>

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

Client-ID

Omgeving

URL

80689076-8c4a-4bef-abc4-82805e17988d

TNI

https://burgerprofiel.tni-vlaanderen.be

88f04968-d331-4ae0-99d9-c6efb845841f

Productie

https://www.burgerprofiel.be