spameris Posted May 16, 2016 Report Share Posted May 16, 2016 Sveiki, tātad ir sistēma, nu saukšu viņu par DB kurai slēdzas klāt caur SOAP un ir WEB lapa kurā ievadot lietotāju un paroli pieprasījums tiek pārsūtīts uz DB un ja ar lietotāju un paroli viss OK, tad cilvēks ielogojas un tiek pie visādiem saviem datiem. Uzdevums ir šiem te lietotājiem iespēju sasaistīt savu kontu ar facebook. Nu idejiski lietotājs dabū savu FB tokenu, WEB dabū FB lietotāja ID un šos ten esošos lietotājus DB sasaistam pēc facebook ID. Gribētu saprast vienu lietu, kā pareizi risināt. Ir tā ka WEB pusei tā īsti es nedrīksu uzticēties un atķļaut WEB serverim tikai pēc FB ID atgriezt lietotāja datus, jo piemēram ja kāds uzlauž to WEB tad diezgan brīvi varētu zinot tikai FB ID iegūt lietotāja datus. Kautkādā veidā vajadzētu DB validēt ka tiešām šis te lietotājs ir autorizējies FB. Mana doma ir tā, kad WEB pieprasa lietotāja datus no DB, tad kopā ar SOAP pieprasījumu tiek nodots arī lietotāja tokens un FB ID, un DB vēlreiz sūta pieprasījumu uz FB API ar šo te tokenu un pieprasa lietotāja ID, ja lietotāja ID sakrīt un nav nekādu kļūdu no FB puses, tad lietotājs ir autorizējies FB. Domāju ka mans gadījums nav nekas unikāls un negribas nekādu divriteni izgudrot pa jaunu. Kāda ir prakse šādos gadījumos ? Pats es to WEB nekodēju, bet vajag saprast kā pareizi droši tur visu sataisīt. Quote Link to comment Share on other sites More sharing options...
Blitz Posted May 16, 2016 Report Share Posted May 16, 2016 1) sūti autorizācijas pieprasījumu uz FB un dabū autorizācijas urli (server->fb) 2) lietotājs tiek redirektēts uz FB autorizāciajs urli, tur tiek autorizēts and atgriezts uz tavu lapu ar access tokenu 3) Izmanto access tokenu lai iegūtu no FB lietotaja datus (FB ID) (server->fb) 4) Atrodi savā datubāzē registrētu leitotāju ar šādu FB ID un autorizē savā sistēmā pa lielam jau domā pareizi Quote Link to comment Share on other sites More sharing options...
spameris Posted May 16, 2016 Author Report Share Posted May 16, 2016 problēma ir ar 4) Atrodi savā datubāzē registrētu leitotāju ar šādu FB ID un autorizē savā sistēmā jo īsti nevaru ticēt WEB, jo negribu atgriest datus tikai pēc FB ID jo WEB neuzticos. gribu lai WEB sūtot pieprasījumu DB iekļautu arī lietotāja tokenu, tad DB sūtītu uz FB jaunu pieprasījumu un pārbaudītu, vai šādam tokenam atbilst konkrēts FB ID. tas tamdēļ, ka īsti WEB nedrīkstu uzticēties un jautājums ir vai ar manu domu tur viss ir OK. Quote Link to comment Share on other sites More sharing options...
Blitz Posted May 16, 2016 Report Share Posted May 16, 2016 kas ir WEB? Lietotāja FB ID tu dabū ar server<->server rekvestu kam IR jauzticas. Tas nav feikojams. Quote Link to comment Share on other sites More sharing options...
Kavacky Posted May 16, 2016 Report Share Posted May 16, 2016 Ar tavu domu neok ir tas, ka tu pārāk daudz iedziļinies. Ja tu dabū no klienta FB tokenu, pēc kura FB iedod usera id, tad tas ir valīds, viss, aizmirsti pārējo. Quote Link to comment Share on other sites More sharing options...
spameris Posted May 16, 2016 Author Report Share Posted May 16, 2016 Ar tavu domu neok ir tas, ka tu pārāk daudz iedziļinies. Ja tu dabū no klienta FB tokenu, pēc kura FB iedod usera id, tad tas ir valīds, viss, aizmirsti pārējo. Runa ir par to ja WEB uzhako, tad var dabūt visus lietotāja datus zinot tikai FB id. Tb WEB sūta uz DB SOAP pieprasījumu ar FB ID un DB atgriež usera datus. Manā gadījumā tas nederēs, man jāzin DB pusē, vai kāds hakeris nesūta feiku pieprasījumu ar FB ID nemaz neautorizējies FB. Tādēļ es domāju validēt šo te FB tokenu no DB puses. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted May 16, 2016 Report Share Posted May 16, 2016 (edited) Facebook JS uzseto cookie. Backendā tu izmanto Facebook PHP API, lai darītu kaut ko šādu: public static function facebookLogin() { $fb = new Facebook( [ 'app_id' => Config::get('app.facebook-auth.app-id'), 'app_secret' => Config::get('app.facebook-auth.secret'), ] ); $helper = $fb->getJavaScriptHelper(); $accessToken = $helper->getAccessToken(); $response = $fb->get('/me?fields=name', $accessToken); $user = $response->getGraphUser(); $localUser = Database::get() ->prepare('SELECT id, name FROM users WHERE facebook_id = ?') ->execute([$user->getId()]) ->fetchRow(); if (empty($localUser)) { $id = Database::get() ->prepare('INSERT INTO users (name, facebook_id) VALUES (?, ?)') ->execute([$user->getName(), $user->getId()]) ->getLastInsertId(); } else { $id = $localUser['id']; // update the name to the latest version whenever the user logs in if ($localUser['name'] !== $user->getName()) { Database::get() ->prepare('UPDATE users SET name = ? WHERE id = ?') ->execute([$user->getName(), $id]); } } // šis uzseto PHP sesiju self::set( 'user', [ 'id' => $id, 'fb_id' => $user->getId(), 'name' => $user->getName(), ] ); } Attiecīgi, ja kaut kas ar to cookie ir šķībi, tad Facebook API metīs exception. Edited May 16, 2016 by jurchiks Quote Link to comment Share on other sites More sharing options...
pcsssss Posted May 16, 2016 Report Share Posted May 16, 2016 FB ID neviens tev pašrocīgi nesūta, FB ID tavs serveris pats pajautā FB serverim, izmantojot iepriekš saņemtu (2. punkts Blitz postā) access tokenu. Quote Link to comment Share on other sites More sharing options...
Blitz Posted May 16, 2016 Report Share Posted May 16, 2016 SOAP is stateful kurā tu sūti līdzi savu autorizēto sessiju. Autorizēt sessiju savukārt būtu jāvar caur FB vai email/pass, kas būtu atsevišks mehanisms. Tieši tā pat kā strādā parastais webs. Neviens kukijos neglabā FB ID un neatorizē lietotāju sessiju pēc ši FB ID, bet glabā autorizētas SESSIJAS ID Quote Link to comment Share on other sites More sharing options...
jurchiks Posted May 16, 2016 Report Share Posted May 16, 2016 Ja tu to tagad man saki, tad palasi, ko FB glabā tajā cookie. Quote Link to comment Share on other sites More sharing options...
Blitz Posted May 16, 2016 Report Share Posted May 16, 2016 (edited) Es to saku topika autoram un viņa aizsargājamam webservisam, pilnīgi pie kājas ko facebooks glabā savos kukijos. Edited May 16, 2016 by Blitz Quote Link to comment Share on other sites More sharing options...
jurchiks Posted May 16, 2016 Report Share Posted May 16, 2016 Es gan teiktu, ka viņa servisa pirmā kļūda bija izmantot SOAP. Quote Link to comment Share on other sites More sharing options...
aaxc Posted May 16, 2016 Report Share Posted May 16, 2016 Jurchik, kāpēc tev nepatīk Eloquent modeļi? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted May 16, 2016 Report Share Posted May 16, 2016 Tāpēc, ka man patīk vienkāršs, lightweight kods. Quote Link to comment Share on other sites More sharing options...
spameris Posted May 16, 2016 Author Report Share Posted May 16, 2016 Par tēmu lūdzu kungi :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.