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 )
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ć?
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;
}
}
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
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