如何使用 Google App Engine + Java 验证用户和密码?

How to Authenticate user, password with Google App Engine + Java?

我需要使用 Google验证用户电子邮件和密码。我正在使用 App Engine + Java 环境。 Google API 中有规定吗?

目前我正在使用

ContactService client = new ContactService ("yourCompany-yourAppName-v1");
client.setUserCredentials("user@example.com", "pa$$word");

我需要替换此 Google API。 我需要使用 Google 而不是应用程序来验证用户。

请建议我该怎么做。

问题不是很清楚,我尽量从两个方面回答。

1) 使用自定义用户名和密码在 appengine 上验证用户。

为此你需要 "classic" 方式,我建议你使用像 Spring 这样的框架和他的模块 "spring-security",看看 this sample

2) 使用 Google 帐户对 appengine 上的用户进行身份验证。

这是我认为最好的方法,你只需要按照this指导即可。

在您最后的评论中,您说 google 用户名和密码是在客户端中输入并在服务器中验证的。这是不可能的,google 已弃用应用程序捕获密码的功能,这非常好。
唯一的方法是使用 oauth2,但另外你需要传递一个特殊参数 &max_auth_age=0。 在这一点上,这个问题基本上是这个问题的重复:No prompt for re-authentication with OAUth2. Why and how to force it?
但是我没有标记重复,因为你的情况不同。
详细解释 oauth 不是这个答案的一部分,因为它在官方文档和许多指南中都有很好的解释。不要使用内置的 appengine userService。而是配置 appengine 页面,使它们都是 public 并在顶部实现 oauth2,例如使用现有的 google+ javascript 登录库(你不确定那些是否让你设置 max_auth_age 参数。如果没有,则需要自己滚动oauth2 "client side 3-legged" 流程。在该流程中,客户端每次都会看到 google 登录页面,并且在客户端流程完成后,客户端将以访问令牌结束,这是它发送给服务器的内容,以验证用户输入了正确的用户名和密码。如果您包含正确的范围(userinfo.email 范围),则服务器可以使用该访问令牌询问 google 生成令牌的用户名,因此您已验证客户端确实登录到 google 并且您知道他们的电子邮件。
但您不会收到密码。足够的信息来验证用户。