Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zwykłe logowanie + Oauth
inomi13
post 9.02.2023, 13:47:11
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

Ostrzeżenie: (0%)
-----


Mam system logowania do aplikacji PHP oparty o adres e-mail i hasło. Chciałem umożliwić logowanie za pomocą konta Microsoft i w tym celu napisałem skrypt, który po zalogowaniu kontem Microsoft generuje token, z którego robię json_decode i wyodrębniam adres e-mail i na tej zasadzie oparłem warunek czy ktoś może wejść do aplikacji. Proszę o sugestie czy moje założenie jest sensowne, jeżeli nie to proszę o informacje jak powinno być to wszystko zrobione aby było przede wszystkim bezpieczne i logiczne.

Przesyłam fragment kodu aby lepiej zobrazować o co dokładanie mi chodzi.

  1. if(array_key_exists('access_token', $_GET))
  2. {
  3. $_SESSION['token'] = $_GET['access_token'];
  4. $innit = curl_init ();
  5.  
  6. curl_setopt($innit, CURLOPT_HTTPHEADER, array ('Authorization: Bearer '.$_SESSION['token'],'Conent-type: application/json'));
  7. curl_setopt($innit, CURLOPT_URL, "https://graph.microsoft.com/v1.0/me/");
  8. curl_setopt($innit, CURLOPT_RETURNTRANSFER, 1);
  9. $rez = json_decode(curl_exec($innit), 1);
  10. curl_close($innit);
  11. if(!array_key_exists('error', $rez))
  12. {
  13. $email_oauth = $rez["mail"];
  14. $select = $db_connect -> prepare("SELECT * FROM persons WHERE email = :email");
  15. $select -> bindParam(':email', $email_oauth, PDO::PARAM_STR);
  16. $select -> execute();
  17. //Verify login
  18. if(count($select) > 0)
  19. {
  20. $_SESSION['logged'] = true;
  21. }
  22. }
  23. }
  24.  
  25. //Check validation email(Basic Login)
  26. if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
  27. {
  28. $email_basic = $_POST['email'];
  29.  
  30. //Select email from database
  31. $select = $db_connect -> prepare("SELECT * FROM persons WHERE email = :email");
  32. $select -> bindParam(':email', $email_basic, PDO::PARAM_STR);
  33. $select -> execute();
  34.  
  35. $row = $select -> fetch();
  36.  
  37. //Verify login
  38. if((count($select) > 0) && (password_verify($_POST['pass'],$row['pass'])))
  39. {
  40. $_SESSION['logged'] = true;
  41. }
  42. }
Go to the top of the page
+Quote Post
Robertus
post 16.04.2023, 11:14:26
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 22.02.2022

Ostrzeżenie: (10%)
X----


Jeśli na koncie Microsoft nie da się ustawić od tak byle jakiego maila (i trzeba potwierdzić posiadanie do niego dostępu), to jest to raczej bezpieczne.
Bo jeśli by się dało ustawić byle jaki, to wówczas można by było zalogować się u ciebie na każde konto, znając tylko maila i sobie zmieniając je w ustawieniach konta Microsoft.

Tylko taka uwaga.

Jeśli zwracany jest id użytkownika z Microsoftu to jednak lepiej sobie zapisać podczas rejestrowania w swoim systemie ten ich id.
Jak ktoś zmieni sobie tam maila na nowy, to nadal bez problemu się u ciebie zaloguje, bo będziesz sprawdzać czy takie id microsoftu masz zapisane wśród swoich userów, a nie na podstawie maila, który zwrócony przez microsoft może być inny niż ten, który kiedyś zarejestrowałeś.

Takie id użytkownika na pewno zwraca Google, Facebook i Twitter więc pewnie Microsoft ma coś podobnego.

Ten post edytował Robertus 16.04.2023, 11:15:42
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 12:37