O, maar dat gaat vrij
"eenvoudig".
Maak een TIdHTTPServer aan. Zet de DefaultPort op hetzelfde wat je bij die redirect_uri opgegeven hebt.
b.v.
http://localhost:8080 dan zet je de DefaultPort op 8080.
Zet de TIdHTTPServer op Active en je hebt een kleine HTTP server
Je moet in je Api (daar waar je je clientid e.d. hebt gekregen) wel de redirect_uri even op
http://localhost:8080 zetten.
Nu kun je de gebruikers dus via de browser (CreateOleObject of gewoon via Open) naar de authentication pagina.
Code:
http://start.exactonline.nl/api/oauth2/auth?client_id=CIENTID&redirect_uri=http://localhost:8080&response_type=code
(Ik weet niet zeker of het dit adres is maar zo iets dergelijks)
Die wordt automatisch na eenmalig invoeren van het wachtwoord naar jouw TIdHTTPServer verwezen (in de browser).
Nu kun je in de event OnCommandGet (dus IdHTTPServer1CommandGet) de ARequestInfo.Params.Text uitlezen.
Daar staat in
?code=abcde. De abcde is dan je
authorization_token.
Met die authorization_token kun je vervolgens een
refresh_token en
access_token aanvragen.
Dit kan gewoon via de normale GET-componenten van Indy. Er is geen user-interactie meer nodig.
De browser zou je kunnen sluiten (als het een CreateOleObject is) anders kun je een pagina laten zien dat ze de browser kunnen sluiten.
De access_tokens zijn bij Exact Online geloof ik maar 10 minuten geldig maar zolang je de refresh_token op slaat kun je daarmee altijd weer nieuwe access_tokens aanvragen.
Voor Exact Online en OAuth 2 ben ik inderdaad weinig tegen gekomen. Ik ben zelf wel bezig een library te maken voor de Google Api OAuth 2.0 in Lazarus/FPC om mail te versturen via Google en om de Google Calender te raadplegen. Het mechanisme van OAuth 2.0 voor Google en Exact zijn vrijwel hetzelfde.
Bookmarks