0

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

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

  1. 用户访问 auth url,他的访问和刷新令牌存储在 sessionId 键下的存储中
  2. 在会话生命周期内,一切正常,因此如果该用户再次访问 auth url,则使用相同的 sessionId 键找到他存储的令牌
  3. 但是在会话到期(服务器重启等)之后,当该用户再次访问 auth url 时,他得到了新的 sessionId,没有找到存储的令牌,所以新的令牌(这次只有访问令牌)被请求并再次存储在新的 sessionId 键下

所以问题是 - 如何生成适用于所有情况的 userId?GoogleAppEngine 实现使用登录用户,这非常好 - 但是我如何仅从 HttpRequest 参数生成这样的 userId 呢?

顺便说一句,这个(https://developers.google.com/gmail/api/auth/web-server)python实现似乎会生成并行用户信息请求以手动获取用户电子邮件......

4

1 回答 1

0

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

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

用户 id 的一个想法是创建一个长寿命的 cookie(使用安全随机生成器)并使用它来识别用户,这样您就可以在再次访问该站点时知道他们是谁,并且可以重用凭据(如果您要求离线访问)。这不是很健壮,因为用户可以清除他们的 cookie,但没有其他方法可以让用户登录。

(是的,Google Oauth 可用于登录用户,但您仍然在查看每次将用户发送到 Google,因此这样做您真的一无所获)。

于 2016-05-27T21:35:37.843 回答