Oauth 2.0 AbstractAuthorizationCodeServlet&CallbackServlet-如何实现getUserId()?

Oauth 2.0 AbstractAuthorizationCodeServlet&CallbackServlet-如何实现getUserId()?,oauth-2.0,google-oauth,google-oauth-java-client,Oauth 2.0,Google Oauth,Google Oauth Java Client,如何在这些Google OAuth2抽象servlet中正确实现抽象getUserIdrequest方法 正如代码所说,它用于查找和存储谷歌凭证。我看到了一个返回会话id的示例,但在会话过期后该示例将无法正常工作: 用户访问auth url,其访问和刷新令牌存储在sessionId键下的存储器中 在会话生存期内,一切正常,因此如果该用户再次访问auth url,则会发现其存储的令牌具有相同的sessionId密钥 但在会话到期后,服务器重新启动等,当该用户再次访问auth url时,他会获得新的

如何在这些Google OAuth2抽象servlet中正确实现抽象getUserIdrequest方法

正如代码所说,它用于查找和存储谷歌凭证。我看到了一个返回会话id的示例,但在会话过期后该示例将无法正常工作:

用户访问auth url,其访问和刷新令牌存储在sessionId键下的存储器中 在会话生存期内,一切正常,因此如果该用户再次访问auth url,则会发现其存储的令牌具有相同的sessionId密钥 但在会话到期后,服务器重新启动等,当该用户再次访问auth url时,他会获得新的sessionId,没有找到存储的令牌,因此,这次只请求新的令牌,并将其存储在新的sessionId密钥下 所以问题是-如何生成在所有情况下都有效的userId?GoogleAppEngine实现使用logged user,这很好——但如何仅从HttpRequest参数生成这样的用户ID呢


顺便说一句,这个python实现似乎会生成并行的userinfo请求来手动获取用户电子邮件…

首先,确保您需要脱机访问用户的凭据

您引用的所有这些示例使用登录用户的原因是,用户id对于在凭据存储中存储正确用户的凭据是必需的。 在这些用例中,GoogleOAuth用于授权web服务器在用户的Google帐户中执行某些操作

用户id的一个想法是使用安全随机生成器创建一个长寿命的coookie,并使用它来识别用户,这样当用户再次访问站点时,您就知道他们是谁,并且如果您请求脱机访问,您可以重用凭据。这不是很可靠,因为用户可以清除他们的cookie,但是除了登录用户之外没有其他方法

是的,GoogleOAuth可以用来登录用户,但是你仍然在寻找一个每次都将用户发送到Google的方法,所以你这样做真的一无所获