Avatar billede hoppe11 Nybegynder
25. november 2010 - 19:11 Der er 16 kommentarer og
1 løsning

opbygning af API - sikker godkendelse

hey..

jeg står og skal til at udvikle mit første API og har så det store spørgsmål..

hvordan kan man sende login (user/pass) til serveren krypteret?

man kan vel ikke bruge sessions med fosocket, så man bliver vel også nød til at sende login ved hver eneste forespørgsel via API'et?
Avatar billede repox Seniormester
25. november 2010 - 19:24 #1
Hvordan ville det være et problem, hvis man blot skulle sende sine loginoplysninger med ved hver forespørgsel?

Hvis dy frygter at blive 'sniffet', kan du jo bare forlange implementeringen iver HTTPS.
Avatar billede arne_v Ekspert
25. november 2010 - 19:43 #2
Enten sender du user/pass med hver request eller så sende du user/pass med et login request og får et token som du kan sende med efterfølgende requests.
Avatar billede hoppe11 Nybegynder
25. november 2010 - 19:55 #3
@ repox

jeg siger heller ikke det vil være noget problem at sende loginoplysningerne med ved hver forespørgsel, men ville vide om det kun kunne gøres sådan..

vil det sige at det bare kan gøres som nedenstående, hvor man bare vælger https:// ??

$fp = fsockopen("https://www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "POST / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
    $out .= "user=test\r\n";
    $out .= "pass=hemmelig\r\n";
    $out .= "bil=volvo\r\n";
    $out .= "dyr=hest\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

@ arne

hvad er fordelen ved at bruge et token?
Avatar billede arne_v Ekspert
25. november 2010 - 20:27 #4
fsockopen tager mig bekendt ikke URL'er men hostnavne som første arg.
Avatar billede arne_v Ekspert
25. november 2010 - 20:28 #5
Forskellen er ikke ret stor. Men med et token slipper man for at skulle gemme user/pass. Man skal naturligvis gemme token, men det kan ikke genbruges.
Avatar billede hoppe11 Nybegynder
25. november 2010 - 20:46 #6
hvordan vil du så foreslå man foretager forespørgslen?
Avatar billede hoppe11 Nybegynder
25. november 2010 - 20:48 #7
men kan man vel også i stedet for user/pass eller token bruge en api_key?

eks.
1354-8464-1845-7882
Avatar billede Slettet bruger
26. november 2010 - 09:31 #8
Det vigtige er Arnes #5 - tillad mig at udpensle:

Brugernavn+password skal ikke gemmes i brugerens browser (cookie)
- hvor de kan opsnuses/overtages af den næste bruger af browseren/computeren.

Brugernavn+password sendes kun én gang, og "veksles" på serveren til en "billet" (som gemmes i brugerens browser (cookie))

Når brugeren logger ud (eller billetten ovskrider sin "holdbarhedsdato") bliver billetten ugyldig, og kan ikke længere benyttes til at identificere brugeren.

Det er faktisk sådan PHP's $session fungerer (en billet i en cookie)
Billettens holdbarhedsdato forlænges hvergang den bruges, og skaber på den måde en "session".

Denne session kan afbrydes ved at lave en egentlig logud (session-id slettes på server). Eller ved at lukke browseren (alle vinduer) hvorved cookien slettes.

Hvis brugeren glemmer begge dele, og bare går fra computeren, med browseren logget ind, er holdbarhedsdatoen eneste beskyttelse. En evt. slambert kan altså nå at overtage sessionen (og dermed brugerens identitet) = den seneste N3M-ID SKANDALE - som altså ikke er noget særligt - det kan ikke være anderledes.

Hvis du vil have krypteret den første afsendelse af brugernavn+password, skal du bruge SSL (HTTPS). Det betyder at browser og server være "enige om" en offentlig krypteringsnøgle = Den skal registreres og trustes af en "betroet trediepart" - Det koster knapper :(
Avatar billede hoppe11 Nybegynder
26. november 2010 - 11:13 #9
det jeg ikke kan blive helt sikker på er hvordan man så sender det krypteret via https, da der ikke kan sendes protokol med i fsockopen() som arne siger..

for det hele skal vel ske via fsockopen() ?

jeg har bestilt SSL certifikat :)
Avatar billede ksoren Nybegynder
26. november 2010 - 16:08 #10
Avatar billede arne_v Ekspert
26. november 2010 - 21:22 #11
Hvis det ikke er HTTP/HTTPS vil token ikke skulle gemmes i en cookie, men i noget andet. Princippet er dog helt det samme.

Krypterings delen af HTTPS fungerer fint med et self signed (gratis!) certfikat. Det som mangler er verifikationen af at serveren er den som den påstår at være.
Avatar billede arne_v Ekspert
26. november 2010 - 21:23 #12
Du kan ikke angive HTTP eller HTTPS i en fsockopen, men jeg mener at du kan angive brug af SSL.
Avatar billede hoppe11 Nybegynder
26. november 2010 - 22:22 #13
tak for hjælpen indtil videre :)

men arne, skal lige være helt med på ideen med den token.. hvad mener du med at gemme den, for det skal vel slet ikke omkring klienten, da hele API modulet jo kører fra en server til en anden? altså server 1 som kommunikerer med server 2 via API'et..
Avatar billede arne_v Ekspert
26. november 2010 - 22:31 #14
client og server er desværre nogle lidt vage begreber.

Snakker du normal web app er:
  client = PC med browser
  server = stor maskine med web server

Men hvis det er server-server, så vil man bruge:
  client = den maskine som connecter
  server = den maskine som lytter på port
Avatar billede hoppe11 Nybegynder
13. december 2010 - 09:43 #15
smid et svar arne
Avatar billede arne_v Ekspert
13. december 2010 - 15:16 #16
ok
Avatar billede hoppe11 Nybegynder
18. december 2010 - 12:00 #17
tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester