Google Cloud Endpoints和用户身份验证

Mag*_*cky 25 authentication google-app-engine android facebook-graph-api google-cloud-endpoints

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

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

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

现在,我想知道这是否与Google之外的其他OAuth方案兼容?那么,如果我想实现Facebook身份验证,我会简单地传递facebook访问令牌吗?

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

Min*_*Wan 52

您可以为端点提供自己的身份验证器,注册用户将通过身份验证器获取 https://developers.google.com/appengine/docs/java/endpoints/javadoc/com/google/api/server/spi/config/ Authenticator.html.

Facebook凭证可以通过标头发送,例如Authorization标头,它可以通过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;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢.云端点的强大功能.太糟糕了,现在没有足够的文件记录! (7认同)
  • 默认身份验证器是com.google.api.server.spi.auth.EndpointsAuthenticator.您可以将其添加到@authenticators列表的末尾,以便在用户提供的身份验证器失败时将其作为后备.端点将尝试所有身份验证器并返回第一个成功的身份验证器. (6认同)
  • @MinWan我在这里讨论了所描述的场景中有关正确处理User参数的单独问题:http://stackoverflow.com/questions/28445840/how-can-i-pass-custom-information-from-an-app - 发动机 - 认证 - 以最endpoi (2认同)