AbstractAuthorizationCode Servlet& CallbackServlet - 如何实现getUserId()?

时间:2015-10-14 19:40:10

标签: oauth-2.0 google-oauth2 google-oauth-java-client

如何在这些Google OAuth2抽象servlet中正确实现抽象getUserId(request)方法?

正如代码所说,它用于查找和存储Google凭据。我已经看到了返回会话ID的示例,但在会话到期后无法正常工作:

  1. 用户访问auth url,其访问权限和刷新令牌存储在sessionId key
  2. 下的存储中
  3. 在会话生命周期内,Everythings工作正常,因此如果此用户再次访问auth url,则会找到存储的令牌,其中包含相同的sessionId密钥
  4. 但是当会话到期(服务器重启等)之后,当该用户再次访问auth url时,他获得新的sessionId,没有找到存储的令牌,因此新的令牌(这次只有访问令牌)被请求并再次存储在新的sessionId键下
  5. 所以问题是 - 如何生成适用于所有情况的userId? GoogleAppEngine实现使用已记录的用户,这非常好 - 但是如何从HttpRequest参数生成这样的userId?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

(是的,Google Oauth可用于登录用户,但您仍然在考虑每次都将用户发送给Google,因此您实际上并没有获得任何好处。)