Google Cloud Endpoints和用户身份验证

时间:2014-08-18 14:33:17

标签: android google-app-engine facebook-graph-api authentication google-cloud-endpoints

我目前刚进入AppEngine世界,并希望使用Cloud Endpoints为我正在开发的移动应用程序创建后端。

我现在的一个问题是关于用户的身份验证。我一直在App Engine上关注Udacity的MOOC,他们教我们如何使用Google帐户对用户的API请求进行身份验证。在后端,我们只需要在方法中添加User参数,并检查用户是否已登录。据我所知,此用户参数由App Engine生成,基于{{ 1}}我们请求的标题。 (可能需要一些确认

现在,有一些我不确定理解的东西,并且在这个MOOC上没有得到很好的解释。

现在,除了谷歌之外,我想知道这是否与其他OAuth方案兼容?那么,如果我想实现Facebook身份验证,我是否只需传递facebook访问令牌?

根据我的搜索结果,在Android上使用Facebook SDK会让我能够生成一个用户访问令牌,用于识别我的用户到Facebook 。将它发送到我的后端之后,我想要检查它与Facebook的有效性,如果它有效,请为我的应用程序创建一个新用户。现在,我还想生成一个新令牌,用于识别用户到我的应用。我需要做什么?

2 个答案:

答案 0 :(得分:52)

您可以为端点提供自己的身份验证器,并且将使用您的身份验证器获取注入的用户 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;
  }
}

答案 1 :(得分:1)

当我尝试你的例子时,我总是得到一个:java.lang.NullPointerException:必须指定authDomain。但是我无法在User对象上设置authDomain。有什么想法吗?

更新:这与此Bug 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

相关问题