Weet even geen betere topic titel, maar hopelijk kan ik het probleem duidelijk uitleggen.
Ik heb een nodejs REST api als backend en een php applicatie als frontend. De api gebruikt oauth als authenticatie en alle api calls returnen dus gepersonaliseerde results op basis van de bearer token.
De nodejs api leest (o.a.) data uit Exact Online. Bijvoorbeeld de url: https://mijn.api/1.0/invoices leest alle facturen uit van de klant die aan de bearer token gekoppeld staat.
De Exact Online REST api gebruikt ook oauth authenticatie. De access tokens zijn 10 minuten geldig en kunnen daarna weer gerefreshed worden.
Het probleem is nu als volgt. Ik sla 1 access/refresh token op in de api (mongodb) en alle calls uit mijn node api die iets met Exact doen gebruiken deze tokens (elke user binnen mijn api gebruikt dus dezelfde access tokens richting Exact). Dit is niet wenselijk wanneer meerdere users tegelijkertijd van de api gebruik maken (wat zeker weten gaat gebeuren) en de access token gaat verlopen. Hierbij heb je potentieel een probleem wanneer een refresh token voor gebruiker A ingewisseld wordt terwijl gebruiker B nog middenin een chain van API calls zit (tenzij je voor élke API call de access/refresh token weer uit mongo ophaalt, maar dat is ook geen schaalbare oplossing, voor sommige functionaliteiten moet ik 4 calls achter elkaar naar Exact uitvoeren).
Het is echter niet mogelijk (zover ik weet) om meerdere access tokens tegelijkertijd actief te hebben binnen Exact Online: wanneer ik een nieuwe access token aanvraag, is de oude niet meer geldig. Ik kan er dus maximaal 1 gebruiken/opslaan.
De enige oplossing die ik kan bedenken is om de facturen/PDF's met een cronjob uit Exact op te halen en op te slaan op een tussen locatie, gekoppeld aan de juiste gebruikers. De api calls zelf hoeven dan niet meer uit Exact data op te halen. Ik wil echter liever niet dezelfde data 2x opslaan (zeker omdat het aantal facturen hopelijk hoog op kan lopen) omdat je dan weer een extra laag met foutgevoeligheid introduceert.
Ik hoop dat het probleem helder is en ben benieuwd of iemand een briljante ingeving heeft.
Ik heb een nodejs REST api als backend en een php applicatie als frontend. De api gebruikt oauth als authenticatie en alle api calls returnen dus gepersonaliseerde results op basis van de bearer token.
De nodejs api leest (o.a.) data uit Exact Online. Bijvoorbeeld de url: https://mijn.api/1.0/invoices leest alle facturen uit van de klant die aan de bearer token gekoppeld staat.
De Exact Online REST api gebruikt ook oauth authenticatie. De access tokens zijn 10 minuten geldig en kunnen daarna weer gerefreshed worden.
Het probleem is nu als volgt. Ik sla 1 access/refresh token op in de api (mongodb) en alle calls uit mijn node api die iets met Exact doen gebruiken deze tokens (elke user binnen mijn api gebruikt dus dezelfde access tokens richting Exact). Dit is niet wenselijk wanneer meerdere users tegelijkertijd van de api gebruik maken (wat zeker weten gaat gebeuren) en de access token gaat verlopen. Hierbij heb je potentieel een probleem wanneer een refresh token voor gebruiker A ingewisseld wordt terwijl gebruiker B nog middenin een chain van API calls zit (tenzij je voor élke API call de access/refresh token weer uit mongo ophaalt, maar dat is ook geen schaalbare oplossing, voor sommige functionaliteiten moet ik 4 calls achter elkaar naar Exact uitvoeren).
Het is echter niet mogelijk (zover ik weet) om meerdere access tokens tegelijkertijd actief te hebben binnen Exact Online: wanneer ik een nieuwe access token aanvraag, is de oude niet meer geldig. Ik kan er dus maximaal 1 gebruiken/opslaan.
De enige oplossing die ik kan bedenken is om de facturen/PDF's met een cronjob uit Exact op te halen en op te slaan op een tussen locatie, gekoppeld aan de juiste gebruikers. De api calls zelf hoeven dan niet meer uit Exact data op te halen. Ik wil echter liever niet dezelfde data 2x opslaan (zeker omdat het aantal facturen hopelijk hoog op kan lopen) omdat je dan weer een extra laag met foutgevoeligheid introduceert.
Ik hoop dat het probleem helder is en ben benieuwd of iemand een briljante ingeving heeft.
[ Voor 5% gewijzigd door cooper87 op 12-04-2015 21:16 ]