[PHP] Authorisatie bij AJAX-calls *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik heb zojuist de laatste hand gelegd aan een applicatie welke XML / JSON data kan extraheren uit een database waar verschillende projecten in staan van onze software. Op deze manier kan nu door middel van AJAX calls (of CURL in PHP) zeer dynamische informatie naar boven worden gehaald en in niet-dynamische sites geplakt worden en het werkt als een trein.

Van de projecten zal 70% vrijelijk toegankelijk zijn voor iedereen, dus iedereen die die URL weet kan datgene opvragen. Op zich is dat geen probleem.

Het probleem ligt echter bij die andere 30%. Dat zullen projecten zijn die niet iedereen in zal mogen zien en ik zit dus al een tijd te zoeken naar een oplossing, aangezien ik dit wel werkend wil hebben met statische HTML met daarin AJAX-calls.

Ik heb op Google gezocht, maar kom daar alleen oplossingen tegen waar je een username en password moet meegeven in de AJAX-call, maar dat lijkt me zeer onveilig, aangezien je die dan letterlijk in de JavaScript hebt staan. Je kan natuurlijk een pop-up doen waar ze gevraagd worden en deze dan meesturen, maar dat lijkt me ook geen prettige manier, omdat je dat dan elke keer moet doen voor een nieuwe request, aangezien er soms meerdere van dit soort AJAX-calls op een website gedaan zullen worden (3 a 4 max.).

Heeft iemand een idee hoe ik dit het beste kan doen? Via CURL gaat het sowieso wel werken, maar dan kan het alleen bij PHP-pagina's en dat is niet direct wenselijk, maar op zich geen ramp. Ook kan ik via een PHP website gewoon inloggen en sessie-informatie opslaan waardoor het ook werkt, maar het fijnste zou zijn als het niet dynamisch kan zijn, maar gewoon een statische site.

Ik had een plan om het als volgt te doen, met in [ ] waar het plaats vind:
1. [CLIENT] Check of project beveiligd is en of er een token beschikbaar is
2. [CLIENT] Als er geen token is toon dan een loginscherm en stuur deze data naar de server
3. [SERVER] Login informatie correct, dan stuurt deze een token terug welke opgeslagen wordt in de database en zeg... 10 minuten geldig is. Token is alleen geldig i.c.m. projecten waarvoor user geautoriseerd is.
4. [CLIENT] Gebruik deze token voor volgende AJAX-calls. En sla de token tijdelijk op als cookie.
5. [SERVER] Server checkt of token valide is en bij dit project hoort. Indien dat zo is geeft de server informatie vrij.

Nu leek dit mij een redelijk goede methode, maar ik weet het niet 100% zeker. Zijn er mensen die mij kunnen bijsturen of mij op een ander idee kunnen brengen?

[ Voor 3% gewijzigd door armageddon_2k1 op 10-11-2009 08:40 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom zou een ajax applicatie verschillen van een andere client/server applicatie?

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Die verschillen niet, dat snap ik. Maar hoe zorg ik ervoor dat iemand kan inloggen zonder dat deze gegevens in een Javascript staan of er constant gepopup'ed moet worden.

Volgens mij zit ik te moeilijk na te denken.....want het is in weze niets anders inderdaad.
Kan ik het dan gewoon af met een simpele login-aanroep en dan sessie-informatie?

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
armageddon_2k1 schreef op dinsdag 10 november 2009 @ 08:46:
Die verschillen niet, dat snap ik. Maar hoe zorg ik ervoor dat iemand kan inloggen zonder dat deze gegevens in een Javascript staan of er constant gepopup'ed moet worden.

Volgens mij zit ik te moeilijk na te denken.....want het is in weze niets anders inderdaad.
Kan ik het dan gewoon af met een simpele login-aanroep en dan sessie-informatie?
Je kan een gebruiker toch gewoon in laten loggen op de site, en dan via een sessionId aan de serverkant controleren wie er ingelogd is?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

armageddon_2k1 schreef op dinsdag 10 november 2009 @ 08:46:
Kan ik het dan gewoon af met een simpele login-aanroep en dan sessie-informatie?
Ja. Die ajax call vanuit javascript is niet veel anders dan een GET request van je browser. Dus als je via de browser inlogt en serverside een sessie start dan komt alle (cookie) informatie mee in een ajax request zodat je gewoon weer bij die sessie gegevens kan serverside.

[ Voor 40% gewijzigd door Creepy op 10-11-2009 09:28 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
D'oh!

Het is nog vroeg :) Dit had ik gewoon kunnen weten.

Maar hoe zou ik dit kunnen doen zonder dat ik een popup wil, maar alleen maar via een script bestand. Dus dat alle gegevens in een scriptbestand staan. Dan kan volgens mij niet op een veilige manier? Ik ga namelijk geen username en password informatie in een script opslaan :+

In ieder geval is bovenstaand het handigst ja.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-09 21:27

Creepy

Tactical Espionage Splatterer

Zonder tussenkomst van de gebruiker zul je toch ergens inloggegevens moeten gaan opslaan. De inloggegevens moeten toch ergens vandaan komen ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
armageddon_2k1 schreef op dinsdag 10 november 2009 @ 09:44:
D'oh!

Het is nog vroeg :) Dit had ik gewoon kunnen weten.

Maar hoe zou ik dit kunnen doen zonder dat ik een popup wil, maar alleen maar via een script bestand. Dus dat alle gegevens in een scriptbestand staan. Dan kan volgens mij niet op een veilige manier? Ik ga namelijk geen username en password informatie in een script opslaan :+

In ieder geval is bovenstaand het handigst ja.
Maar als je de gegevens in een script-bestand wil hebben, hoe ga je dan onderscheid maken tussen wie er wel en niet bij mag? Op de een of andere manier moet je de gebruiker toch authenticeren? Daar zal je informatie van de gebruiker bij nodig hebben.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Het enige wat ik kan verzinnen is dat je zelf die username/password intikt en het sessionid in het script opslaat en het valideert op ip-adres. Nooit 100% veilig maar dan hoef je niet de username/password op te slaan in het script.
Pagina: 1