2013-02-18 18 views
12

Piszę aplikację przy użyciu Symfony2, która będzie współpracować z Wordnik REST API.Uwierzytelnianie Symfony2 przez REST API innej firmy

Obecnie interfejs API programu Wordnik nie oferuje możliwości protokołu OAuth, dlatego muszę zaakceptować nazwę użytkownika i hasło, które następnie przejdę w przejrzysty sposób do interfejsu API.

Chciałbym zintegrować to uwierzytelnianie API z systemem bezpieczeństwa Symfony2, ale jak dotąd nie byłem w stanie określić, jaka jest najlepsza ścieżka wdrożenia.

Nie sądzę, że custom user provider jest poprawny, ponieważ hasło nie jest przechowywane w moim systemie. Wszystkie przykłady dotyczące custom authentication providers wydają się dotyczyć zabezpieczania części aplikacji, a nie przed API REST.

Nie jest dla mnie jasne, do jakiego stopnia FOSUserBundle pomaga rozwiązać ten problem.

Idealny przepływ:

  • Użytkownik zapewnia poświadczeń.
  • Poświadczenia są przekazywane do REST API 3rd party
  • Jeśli poświadczenia są prawidłowe:
    • Odpowiedni „trzeci użytkownik partia” Podmiot jest tworzony przez mojego wniosku, jeśli nie istnieje.
    • Użytkownik jest uwierzytelniany za pomocą tego elementu "Użytkownik zewnętrzny".

Co jest najlepszym sposobem wdrożenia tego w kontekście zabezpieczeń Symfony2?

Dzięki!

Podobne pytania:

+0

Mam problem z tym samym problemem. Czy mógłbyś podzielić się swoim kodem za to, w jaki sposób to zaimplementowałeś? – Steffan

+0

@Steffan - Trwa to 2 lata od napisania tego kodu, ale możesz zobaczyć dostawcę/token, który napisaliśmy tutaj: https://github.com/freen/wordrot/tree/584a7b361ba21eb1cf5303949cb6b3d30eecf687/src/WordRot/PlayBundle/ Security/Authentication .... po kolejnych zatwierdzeniach usunąłem backend PHP na rzecz wypróbowania backendu Node, tak aby commit był ostatnim stanem PHP. –

+0

Thx dużo, ale znalazłem łatwiejszy sposób to zrobić z [system ochrony] (https://knpuniversity.com/screencast/guard/login-form) thx do @DevDonkey z [this] (http: // stackoverflow .pl/questions/34376315/symfony2-authenticate-is-not-execution? noredirect = 1 # comment56501487_34376315). – Steffan

Odpowiedz

4

trzeba wdrożyć dostawcy uwierzytelniania zwyczaj, jak opisano w: http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

Nie mogę powiedzieć, co jest najlepszym sposobem jest tylko po to, aby pomóc Ci zacząć: Tworzysz słuchacza, token, dostawcę i fabrykę.

Metoda próbna uwierzytelnienia słuchacza pobiera poświadczenia dostarczone przez użytkownika i tworzy nowy token za pomocą tego wejścia. Na końcu metody dodasz: return $ this-> authenticationManager-> authenticate ($ token);

Twój dostawca użyje tego tokena w metodzie uwierzytelniania, aby wysłać żądanie API.

Dla nieistniejących użytkowników masz dwie opcje: - utworzyć użytkownika w metodzie uwierzytelnienia po wywołaniu API i po sprawdzeniu, czy już istnieje, który moim zdaniem jest prawda droga - tworzyć własne uwierzytelnianie obsługi awarii, która jest jak https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php ale na górze metody onAuthenticationFailure jeśli dodać ($ wyjątek instanceof UsernameNotFoundException & & (null! == $ znacznik = $ exception-> GetToken()) & & $ żeton instanceof YourWordnikToken) { // utworzenie że użytkownik tutaj }

To tylko podstawowy pomysł, jak to działa ... Jestem na IRC z przydomkiem hacfi - daj mi znać, jeśli potrzebujesz dalszych wskazówek

+0

hej hacfi, nie widzę cię na tym kanale w tej chwili :) możesz znaleźć kod mojej aplikacji tutaj: https://github.com/freen/wordrot ... Obecnie otrzymuję ten błąd: 'Błąd krytyczny: nie można uzyskać dostępu do obiektu nadrzędnego :: gdy bieżący zakres klasy nie ma elementu nadrzędnego w /[ ...]/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php on line 43 ' ... Wygląda na to, że konfiguracja jest nieznacznie wyłączona, jeśli nadal próbuje użyć UserAuthenticationProvider (powinien używać programu WordnikProvider) - Czy widzisz jakieś problemy z moją implementacją? –

+0

Sklonuję repo na dziś wieczór i spróbuję to naprawić! – hacfi

+0

Hej Hacfi, dzięki za pomoc! Połączyłem się z Twoją prośbą o wyciągnięcie, [rozwiązałem błąd argumentu konstruktora na dostawcy uwierzytelniania] (https://github.com/freen/wordrot/commit/0ec3ae9f33bc66fbcdcad668b47de0ee2120d9fe), ale nadal otrzymuję dokładnie ten sam błąd, co poprzednio. –

Powiązane problemy