layout | parent | nav_order | title |
---|---|---|---|
default |
Onderdelen |
1 |
OAuth |
Maak het mogelijk voor externe partijen om in te loggen met een C.S.R. webstek account en ook om met eventuele api's te verbinden.
Zie oauth2-server-bundle
voor meer info en documentatie.
De league:oauth2-server:
commands zijn er om clients te beheren.
De OAuth2 flow is als volgt:
- De gebruiker komt aan bij een externe service en klikt op de knop om in te loggen met zijn C.S.R. Delft stek account.
- De gebruiker wordt doorverwezen naar https://csrdelft.nl/authorize?client_id=...&...
OAUth2AuthorizeListener
pikt dit op en toont een pagina met uitleg aan de gebruiker- De gebruiker klikt op Autoriseer
- De gebruiker wordt doorverwezen naar de
redirect_uri
die de externe service heeft opgegeven, met een token. - De externe service ontvangt een refresh_token
- De externe service kan de refresh_token gebruiken om bij
/api/v3/token
een access_token op te vragen. - De externe service
- Weet dat de gebruiker een C.S.R. stek account heeft
- Kan requests maken naar pagina's in
/api/v3/
Vaak wordt hierna nog een request gemaakt naar /api/v3/profiel
om meer info op te vragen over de gebruiker.
In OAuth2 worden scopes gebruikt om aan te geven tot welke onderdelen een client toegang heeft. Kijk in de OAuth2Scope
enum voor alle scopes.
In de code can op scope gecontroleerd worden door de rol van de gebruiker te controleren, deze roles hebben altijd de vorm ROLE_OAUTH2_<scopenaam>
. Bijvoorbeeld om de scope PROFIEL:EMAIL
te checken:
function heeftScopeProfielEmail(
\Symfony\Component\Security\Core\Security $security
) {
return $security->isGranted('ROLE_OAUTH2_PROFIEL:EMAIL');
}
De OAuth2 server werkt niet standaard bij een lokale installatie, er moeten eerst nog een paar sleutels gegenereerd worden.
De volgende velden moeten worden gezet in .env.local
:
OAUTH_PRIVATE_KEY=
OAUTH_PUBLIC_KEY=
OAUTH_PASSPHRASE=
OAUTH_ENCRYPTION_KEY=
Zie de documentatie van de onderliggende OAuth 2 server voor info over het genereren van sleutels. Plaats deze sleutels in OAUTH2_PRIVATE_KEY_PATH
en OAUTH2_PUBLIC_KEY_PATH
.
Stop een random string in OAUTH2_ENCRYPTION_KEY
Zie hiervoor ook de docs van oauth2-bundle
Let op dat bij het league:oauth2-server:update-client
command je alle velden moet meegeven, anders worden ze leeg gemaakt.