2016-08-26 18 views
5

Opracowałem rozszerzenie do Chrome, które wywołuje niektóre interfejsy API w mojej witrynie, które z kolei używają uwierzytelniania PHPAuth/PHPAuth. Zasadniczo, mam użytkownika, aby wprowadzić nazwę użytkownika i hasło do strony internetowej jako opcję rozszerzenia i mogę wywołać interfejs API logowania na mojej stronie internetowej w następujący sposób.Logowanie do witryny przy użyciu PHPAuth/PHPAuth za pośrednictwem rozszerzenia Chrome

if (isset($_POST['email']) && isset($_POST['password'])) { 
       $email = $_POST['email']; 
       $password = $_POST['password']; 

       if($auth->isLogged()) { 
        $userId = $auth->getSessionUID($_COOKIE[$authConfig->cookie_name]); 
        echo json_encode([ 
           'userId' => $userId, 
          ]); 
        die(); 
       } 

       $login = $auth->login($email, $password, true); 

       if($login['error']) { 
        die($login['message']); 
       } else { 
        $userId = $auth->getSessionUID($login['hash']); 
        echo json_encode([ 
           'userId' => $userId, 
          ]); 
        die(); 
       } 
      } else { 
       die('Error'); 
      } 

Powoduje to tymczasowe rozważenie uwierzytelnienia użytkownika, ale w rzeczywistości nie zaloguje użytkownika do witryny. Innymi słowy, po otwarciu strony chronionej hasłem za pomocą elementu iframe, wyświetla się formularz logowania użytkownika.

Czy ktoś może mi powiedzieć, co robię źle, lub lepszy sposób na to, czego potrzebuję.

Zasadniczo mam oszczędności użytkownikowi konieczność utrzymania rejestrowanie w każdym czasie i otworzyć chronionych stron, kiedy zostanie on wykonany, aby się zalogować.

+0

prawdopodobnie związane z plików cookie nie jest set/przeniesionych wewnątrz iframe. Tylko zgaduję. – wOxxOm

+0

Twój komentarz ma sens, ale czy w takim przypadku strona nie pojawi się po ponownym odświeżeniu? Nie rób tego. –

Odpowiedz

1

Sprawdź, czy manifest.json nie zawiera adresu URL witryny oraz wszystkie wymagane subdomen na przykład

"permissions": [ 
    "http://example.com/", 
    "http://*.example.com/", 
    "https://example.com/", 
    "https://*.example.com/" 
], 

można też komunikować się ze strony internetowej w nieco inny sposób, na przykład:

  • raz pierwszy podczas logowania do wstęg może zwrócić token, który można przechowywać w przeglądarce pod adresem local storage i po stronie serwera względem użytkownika.

  • Ten token powinien zostać wysłany później z rozszerzenia wraz z żądaniem do Twojej witryny.

  • po stronie strony internetowej należy sprawdzić, czy token istnieje; jeśli należy do właściwego użytkownika; i nie wygaśnie. jeśli jest poprawna, wykonaj żądanie żądane przez użytkownika.

I szczerze mówiąc o wiele bardziej bezpieczne byłoby użyć OAuth_2.0 który jest bardziej bezpieczny, a następnie nazwę użytkownika/hasło uwierzytelniania w ciągu kontekście rozszerzenia

+0

Moje manifest ma już pełne uprawnienia ... "uprawnienia": ["http: // */*", "https: // */*", "magazyn", "webNavigation", "", " *: // */* "], Chociaż masz rację, OAuth byłby lepszy. Zobaczmy, czy możemy to naprawić, ponieważ już otworzyłem to pytanie. –