7

Niedawno rozpocząłem pracę z Google App Engine. Zamierzam użyć Flask do obsługi stron internetowych i API punktu końcowego, najlepiej z Endpoints-Proto-Datastore dla wszystkich innych.Aparat aplikacji Google: uwierzytelnianie punktów końcowych, gdy używany jest autouzgodny autowy lub otwarty identyfikator.

Od samego początku, mechanizmy uwierzytelniania spoza Google oparte na GAE wydają się wymagać trochę pracy. Uprzejmie jakiejkolwiek rzucić światło na kwestie znalazłem do tej pory:

niestandardowy uwierzytelniania

Jeśli możesz napisać Open provider ID jako część aplikacji, należy użyć coś takiego Pythona OpenID, a także implementuj konsumenta w tym samym przepływie pracy, aby wyglądał jak zwykłe logowanie. W ten sposób ładnie się integruje z interfejsem API GAE Users. Zgaduję, że jeśli zostanie to zrobione poprawnie, users.get_current_user() będzie działało dobrze.

Jeśli chcesz pominąć pisanie własnego dostawcy OpenID i zamiast tego napisać system autoryzacji e-mail/hasło za pomocą Flask-Login integrującego się z NDB, to powinno być również w porządku. Jednak jeden zaskakujący trochę informacji w GAE documentation mówi mogę instancję obiektu użytkownika tak:

user = users.User("[email protected]")

jednak (nie ma user.put() metoda tutaj) A users.get_current_user() nadal zwraca None. Więc jaki byłby pożytek z konstruowania obiektu użytkownika?

Punkty końcowe Autoryzacja

Na tym user = wymaganych w metodzie dekoratora dla Endpoint-Proto-Datastore walcowane API, OAuth wydaje się działać od razu - wszystko co musisz zrobić podczas testowania go w API explorer ma włączyć przełącznik OAuth 2.0 i wybrać poprawny zakres Oauth 2.0. Czy oznacza to, że jeśli wdrożysz dostawcę OpenID, który będzie poprawnie zintegrowany z interfejsem API User, nie wystarczy użyć magii OAuth interfejsu API punktu końcowego?

Również tutaj wydaje się, że skonstruowanie obiektu użytkownika nie pomoże w spełnieniu wymogu uwierzytelnienia.

W jaki sposób niestandardowe uwierzytelnianie/inna implementacja OpenID będzie działać z uwierzytelnianiem/autoryzacją interfejsu API punktu końcowego?

+0

Bardzo dobre pytanie. Chcę zrobić mniej więcej to samo: wprowadzić pewnego rodzaju "podstawowe" uwierzytelnianie za pomocą nazwy użytkownika/tokena. Próbowałem z servletFilter, ale wydaje się, że servletFilters nie działają z/_ah/api-URL. – icyerasor

Odpowiedz

5

Nie chciałem używać oAuth, ale prostszej formy uwierzytelniania z użytkownikiem/tokenem.

Zrobiłem więc niestandardowy filtr ServletFilter, który mapuje do/_ah/spi/* i przechwytuje informacje logowania z HTTPServletRequest tam, jeśli jest to żądanie Endpoint-API.

Wydaje się działać do tej pory, ale nie jestem naprawdę pewien, czy to jest droga. Ale ponieważ nie znalazłem żadnych przykładów non-oAuth-Auth w dowolnym miejscu, jest to obecnie moje najlepsze ujęcie.

Chciałbym uzyskać wskazówki dotyczące najlepszych praktyk od @bossylobster lub @Dan Holevoet.

Powiązane problemy