android - Google Cloud Endpoints 和用户身份验证

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

我目前是 AppEngine 领域的新手,想为我正在开发的移动应用程序使用 Cloud Endpoints 创建后端。

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

现在,有一堆东西我不确定,而且在这个 MOOC 上也没有很好地解释。

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

根据我的搜索结果,在 Android 上使用 Facebook SDK 可以让我生成一个用户访问 token ,它可以识别我的用户到 facebook。将它发送到我的后端后,我想用 Facebook 检查它的有效性,如果有效,就为我的应用程序创建一个新用户。现在,我还想生成一个新的 token 来识别我的应用程序的用户。我需要做什么才能这样做?

最佳答案

您可以向 Endpoints 提供自己的身份验证器,注入(inject)的用户将与您的身份验证器一起获得 https://developers.google.com/appengine/docs/java/endpoints/javadoc/com/google/api/server/spi/config/Authenticator.html .

Facebook 凭据可以通过 header 发送,例如授权头,可以通过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;
  }
}

关于android - Google Cloud Endpoints 和用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365858/

相关文章:

安卓和客户端证书

android - Monodroid 将 imageview 设置为存储在 sdcard 上的图像

android - Firebase 登录不适用于较低的 Android 版本

Python App Engine 通过 Google Cloud Storage 提供文件服务

ruby - 如何以编程方式在Facebook Pages上发布(共享)YouTube视频?

java - 在android中使用带有multipart的HttpUrlConnection上传文件的进度非常快

java - 与缓存相关的 HTTP header 在 App Engine 上的 Servlet 响应中被覆盖

node.js - 以 block 方式上传视频 api 调用

java - 哪个 facebook 插件最适合在 grails 1.3.7 中完美集成 facebook?

Python 2.6 + PIL + Google App Engine 问题