我目前刚进入AppEngine世界,并希望使用Cloud Endpoints为我正在开发的移动应用程序创建后端。
我现在的一个问题是关于用户的身份验证。我一直在App Engine上关注Udacity的MOOC,他们教我们如何使用Google帐户对用户的API请求进行身份验证。在后端,我们只需要在方法中添加User
参数,并检查用户是否已登录。据我所知,此用户参数由App Engine生成,基于{{ 1}}我们请求的标题。 (可能需要一些确认)
现在,有一些我不确定理解的东西,并且在这个MOOC上没有得到很好的解释。
现在,除了谷歌之外,我想知道这是否与其他OAuth方案兼容?那么,如果我想实现Facebook身份验证,我是否只需传递facebook访问令牌?
根据我的搜索结果,在Android上使用Facebook SDK会让我能够生成一个用户访问令牌,用于识别我的用户到Facebook 。将它发送到我的后端之后,我想要检查它与Facebook的有效性,如果它有效,请为我的应用程序创建一个新用户。现在,我还想生成一个新令牌,用于识别用户到我的应用。我需要做什么?
答案 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。有什么想法吗?
相关联版本1.9.22