我目前是 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/