Authenticatie
Authenticatie geschiedt op basis van JWT tokens. Na succesvol inloggen krijgt een gebruiker een Refresh token, waarmee hij een Access token kan opvragen dat toegang geeft tot de API.
Endpoints
Login met username/password (geen 2FA in configuratie)
Endpoint: /auth/knowledge
Argumenten:
loginName(verplicht)password(verplicht)
Resultaat (in volgorde van als):
401 Unauthorizedals login niet juist is200 OKmet de body:
{
"accessToken": JWT token met Role=Access
"refreshToken": JWT token met Role=Refresh
}
Login met username/password (2FA in configuratie)
Endpoint: /auth/knowledge
Argumenten:
loginName(verplicht)password(verplicht)possessionToken(optioneel)
Resultaat (in volgorde van als):
401 Unauthorizedals login niet juist is200 OKalspossessionTokengeldig is met de body:
{
"accessToken": JWT token met Role=Access,
"refreshToken": JWT token met Role=Refresh
}
200 OKmet de body:
{
"knowledgeToken": JWT token met Role=Knowledge,
"seed": de seed,
"challenge": de challenge,
"channel": het medium waarmee de tweede factor wordt benaderd,
"sequenceNumber": het volgnummer
}
Tweede factor
Endpoint: /auth/possession
Argumenten:
seed(verplicht)response(verplicht)knowledgeToken(verplicht)
Resultaat (in volgorde van als):
401 UnauthorizedalsknowledgeTokenniet geldig is401 Unauthorizedalsseed+responseniet geldig is200 OKmet de body:
{
"accessToken": JWT token met Role=Access,
"refreshToken": JWT token met Role=Refresh,
"possessionToken": JWT token met Role=Possession
}
Externe login (init)
Endpoint: /auth/{identityProvider}/init
Resultaat (in volgorde van als):
404 Not FoundalsidentityProviderniet bekend is200 OKmet de body:
{
loginUrl: de login url,
logoutUrl: de logout url
}
Externe login (verificatie)
Endpoint: /auth/{identityProvider}/verify
Argumenten:
code(verplicht)
Resultaat (in volgorde van als):
404 Not FoundalsidentityProviderniet bekend is401 Unauthorizedalscodeniet geldig is401 Unauthorizedalscodeniet te vertalen is naar een gebruiker (op basis van loginnaam/e-mailadres)200 OKmet de body:
{
"accessToken": JWT token met Role=Access,
"refreshToken": JWT token met Role=Refresh
}
Refresh
Endpoint: /auth/refresh
Argumenten:
refreshToken(verplicht)
Resultaat (in volgorde van als):
401 UnauthorizedalsrefreshTokenniet geldig is401 Unauthorizedals gebruiker inrefreshTokenniet actief is200 OKmet de body:
{
"accessToken": JWT token met Role=Access,
"refreshToken": JWT token met Role=Refresh
}
User flows
Gebruiker logt in zonder 2FA
- Logt in met username en password (
knowledge) - Onthoudt refresh+access tokens
- Gebruikt API tot access token is verlopen
- Verkrijgt nieuw refresh+access tokens (
refresh) - etc
Gebruiker logt in met 2FA (1e keer)
- Logt in met username en password (
knowledge) - Stuurt response op challenge op (
possession) - Onthoudt refresh+access+possession tokens
- Gebruikt API tot access token is verlopen
- Verkrijgt nieuw refresh+access tokens (
refresh) - etc
Gebruiker logt in met 2FA (vorige 2FA is nog geldig)
- Logt in met username en password en possessionToken (
knowledge) - Onthoudt refresh+access tokens
- Gebruikt API tot access token is verlopen
- Verkrijgt nieuw refresh+access tokens (
refresh) - etc
Gebruiker logt in met externe inlog (Microsoft/Google)
- Verkrijgt URL om in te loggen (
{identityProvider}/init) - Wordt geredirect naar de URL en logt daar in
- Wordt geredirect terug met code
- Verifieert code (
{identityProvider}/verify) - Onthoudt refresh+access tokens
- Gebruikt API tot access token is verlopen
- Verkrijgt nieuw refresh+access tokens (
refresh) - etc