Подтвердить что ты не робот

Конечные точки Google и аутентификация пользователей

В настоящее время я новичок в мире AppEngine и хочу создать бэкэнд с использованием Cloud Endpoints для мобильного приложения, которое я разрабатываю.

Одной из моих проблем сейчас является аутентификация пользователя. Я следил за UDacity MOOC в App Engine, и они научили нас, как аутентифицировать пользователя для запроса API, используя учетные записи Google. На стороне сервера нам просто нужно добавить параметр User к нашему методу и проверить, не подписан ли пользователь. Насколько мне известно, этот пользовательский параметр генерируется App Engine на основе заголовка Authorization нашего запроса. (может потребоваться подтверждение)

Теперь есть куча вещей, которые я не уверен, чтобы понять, и это было не так хорошо объяснено на этом MOOC.

Теперь, я хотел бы знать, совместим ли это с другими схемами OAuth, рядом с Google? Итак, если я хочу реализовать проверку подлинности Facebook, я просто передаю токен доступа к facebook?

Из того, что я искал, использование Facebook SDK на Android приведет меня к тому, чтобы создать токен доступа пользователя, который идентифицирует моего пользователя в facebook. После отправки его на мой сервер, я хотел бы проверить его действительность с Facebook, и если он действителен, создайте нового пользователя для моего приложения. Теперь я также хочу создать новый токен, который идентифицирует пользователя для моего приложения. Что мне нужно сделать, чтобы сделать это?

4b9b3361

Ответ 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