Конечные точки Google и аутентификация пользователей
В настоящее время я новичок в мире AppEngine и хочу создать бэкэнд с использованием Cloud Endpoints для мобильного приложения, которое я разрабатываю.
Одной из моих проблем сейчас является аутентификация пользователя. Я следил за UDacity MOOC в App Engine, и они научили нас, как аутентифицировать пользователя для запроса API, используя учетные записи Google. На стороне сервера нам просто нужно добавить параметр User
к нашему методу и проверить, не подписан ли пользователь. Насколько мне известно, этот пользовательский параметр генерируется App Engine на основе заголовка Authorization
нашего запроса. (может потребоваться подтверждение)
Теперь есть куча вещей, которые я не уверен, чтобы понять, и это было не так хорошо объяснено на этом MOOC.
Теперь, я хотел бы знать, совместим ли это с другими схемами OAuth, рядом с Google? Итак, если я хочу реализовать проверку подлинности Facebook, я просто передаю токен доступа к facebook?
Из того, что я искал, использование Facebook SDK на Android приведет меня к тому, чтобы создать токен доступа пользователя, который идентифицирует моего пользователя в facebook. После отправки его на мой сервер, я хотел бы проверить его действительность с Facebook, и если он действителен, создайте нового пользователя для моего приложения. Теперь я также хочу создать новый токен, который идентифицирует пользователя для моего приложения. Что мне нужно сделать, чтобы сделать это?
Ответы
Ответ 1
Вы можете предоставить свой собственный аутентификатор конечным точкам, и введенный пользователь будет получен с помощью вашего аутентификатора
https://developers.google.com/appengine/docs/java/endpoints/javadoc/com/google/api/server/spi/config/Authenticator.html.
Учетные данные Facebook можно отправить через заголовок, например. Заголовок авторизации, и к нему можно получить доступ из бэкэнд через HttpServletRequest, который вы можете обрабатывать внутри метода Authenticator.authenticate.
Например.
// 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;
}
}
Ответ 2
Когда я попробую ваш пример, я всегда получаю: java.lang.NullPointerException: authDomain необходимо указать. Но я не могу установить authDomain в объекте User. Любые идеи?
UPDATE: это связано с этой ошибкой https://code.google.com/p/googleappengine/issues/detail?id=12060&q=endpoints&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log
в версии 1.9.22