Punkty końcowe Google Cloud i uwierzytelnianie użytkownika

Jestem obecnie nowy w świecie AppEngine i chcę stworzyć backend za pomocą punktów końcowych w chmurze dla rozwijanej aplikacji mobilnej.

Jednym z moich problemów jest teraz uwierzytelnianie użytkownika. Śledziłem MOOC Udacity na silniku aplikacji i nauczyli nas, jak uwierzytelnić użytkownika za pomocą konta Google. Po stronie zaplecza, po prostu musimy dodać parametr User do naszej metody i sprawdzić, czy użytkownik jest zalogowany. O ile wiem, ten parametr użytkownika jest generowany przez App Engine, na podstawie nagłówka Authorization naszego żądania. ( może tam być potrzebne potwierdzenie )

Jest kilka rzeczy, których nie jestem pewien, aby zrozumieć i które nie były tak dobrze wyjaśnione w tym MOOC. Chciałbym wiedzieć, czy jest to zgodne z innymi programami OAuth, poza Google? Czy Facebook Facebook access token może po prostu przekazać, jeśli chcę zaimplementować uwierzytelnianie Facebooka?

Z tego co ja Facebook Facebook SDK na Androida pozwoli mi wygenerować Token dostępu użytkownika, który identyfikuje mojego użytkownika na Facebooku. Po wysłaniu go do mojego backendu chciałbym sprawdzić jego ważność za pomocą Facebook, a jeśli jest ważny, utwórz nowego Użytkownika do mojej aplikacji. Teraz chciałbym również wygenerować nowy token, który identyfikuje użytkownika do mojej aplikacji. Co muszę zrobić, aby to zrobić?

Author: MagicMicky, 2014-08-18

2 answers

Możesz dostarczyć swój authenticator do punktów końcowych, a wstrzyknięty użytkownik zostanie uzyskany za pomocą authenticatora https://developers.google.com/appengine/docs/java/endpoints/javadoc/com/google/api/server/spi/config/Authenticator.html.

Dane uwierzytelniające Facebook mogą być wysyłane przez nagłówek, np. nagłówek autoryzacji, A dostęp do nich można uzyskać z zaplecza za pośrednictwem HttpServletRequest, który można obsługiwać wewnątrz Authenticatora.metoda uwierzytelniania.

Dla przykład.

// Custom Authenticator class
public class MyAuthenticator implements Authenticator {
  @Override
  public User authenticate(HttpServletRequest request) {
    String token = request.getHeader("Authorization");
    if (token != null) {
      String user = authenticateFacebook(token);  // apply your Facebook auth.
      if (user != null) {
        return new User(user);
      }
    }
    return null;
  }
}

// Endpoints class.
@Api(name = "example", authenticators = {MyAuthenticator.class})
public class MyEndpoints {
  public Container getThing(User user) {
    Container c = new Container();
    if (user != null) {
      c.email = user.getEmail();
    }
    return c;
  }

  public class Container {
    public String email;
    public String extraData;
  }
}
 53
Author: Min Wan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-28 17:10:57

Kiedy wypróbuję twój przykład zawsze dostaję: java.lang.NullPointerException: musi być podany authDomain. Ale nie mogę ustawić authDomain na obiekcie User. Jakieś pomysły?

UPDATE: to jest połączone z tym błędem https://code.google.com/p/googleappengine/issues/detail?id=12060&q=endpoints&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

W wersji 1.9.22

 1
Author: flosk8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-30 22:12:12