2015-10-14 53 views
0

如何在这些Google OAuth2抽象servlet中正确实现抽象getUserId(request)方法?如代码所示,它用于查找和存储谷歌凭证。我见过的例子返回会话ID,但不会正确会话期满后工作:AbstractAuthorizationCode Servlet&CallbackServlet - 如何实现getUserId()?

  1. 用户访问验证网址,他的访问下的sessionId关键
  2. 在会话有效期和刷新令牌存储在存储,everythings工作正常,所以如果这个用户再次访问auth网址,他的存储的令牌被发现具有相同的sessionId密钥
  3. 但会话过期后(服务器重新启动等),当这个用户再次访问auth url时,他得到新的sessionId,no找到存储的令牌,因此请求新的令牌(这次仅访问令牌),并在新会话密钥下再次存储。

所以问题是 - 如何生成将在所有情况下工作的userId? GoogleAppEngine实现使用已记录的用户,这非常好 - 但是我怎样才能从HttpRequest参数生成这样的userId?

BTW这个(https://developers.google.com/gmail/api/auth/web-server)Python实现似乎产生并行用户信息请求来获取用户手动电子邮件......

回答

0

首先,确保你需要将用户的凭据离线访问。

您引用的所有示例都使用登录用户的原因是因为用户标识为必需用于存储凭证存储中正确用户的凭证。 在这些用例中,Google OAuth用于授权网络服务器在用户的Google帐户中执行某些操作。

用户ID创建一个长寿命的coookie(使用安全随机生成器)并用它来识别用户的一个想法,所以你知道他们是什么时候再次访问该网站,并且可以重用凭证(如果你要求离线访问)。这不是非常强大,因为用户可以清除他们的cookie,但是没有其他方式可以记录用户。

(是的,Google Oauth可以用于登录用户,但您仍然在寻找每次将用户发送给Google,因此您通过这样做确实没有收获)。