【问题标题】:Google OAuth2 Flow in Server Side Web Application in JavaJava中服务器端Web应用程序中的Google OAuth2流程
【发布时间】:2017-06-04 14:35:34
【问题描述】:

我在理解 oauth2 流程时遇到了问题。 用户(由 user_id 标识)在浏览器中启动 GoogleAccounts 连接。请求被传递给 Servlet,后者将重定向字符串发送到客户端 (Javascript),然后将用户重定向到该 Auth URL。 在用户同意时,响应将返回到回调 url(映射到 servlet)。 我的困惑是当回调 servlet 被调用时,我如何识别这个 authCode 属于哪个用户(user_id)? 我必须使用 oAuth2 的状态参数吗?

请帮忙。

【问题讨论】:

  • 这可能是我所知道的最简单的方法是使用 Google plus api。 Http://developers.google.com/+/web/api/rest/latest/people/get 发送给我会得到一些关于当前认证用户的信息。将访问令牌发送到令牌验证端点也可以工作,但取决于您请求的范围
  • @DalmTo 我可能没有正确提出我的问题。这里有更多详细信息在我的网络应用程序中,由唯一 ID 标识的(经过身份验证的)用户尝试在浏览器上连接他的(一个或多个)谷歌帐户结尾 。服务器端 (java) 启动 oauth 流程将用户重定向到 authurl。用户同意后,在我的回调 servlet 上,我想确定我的应用程序的哪个用户(由唯一 id 标识)已启动连接此 google 帐户,以便我可以针对该用户存储此 google 授权。请帮忙,我应该使用 State paran
  • 我认为您可以尝试 state 参数,因为它会携带 user_id 作为响应。它的描述说:在收到响应时提供可能对您的应用程序有用的任何状态。 Google 授权服务器往返此参数,因此您的应用程序接收到它发送的相同值。可能的用途包括将用户重定向到您站点中的正确资源,以及跨站点请求伪造缓解。 developers.google.com/identity/protocols/OAuth2UserAgent
  • 是的,我认为这实际上是要走的路..我希望有人审查我的想法..想从谷歌开发人员那里得到一些答案。在这里见不到人
  • 我目前正在使用 Sheets API,当我在 Web 服务器上部署应用程序时,在授权过程中遇到了问题。你能分享一些你是怎么做的代码吗?

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


【解决方案1】:

正如 cmets 所建议的,state 参数是您的朋友。最简单的方法是简单地设置state=user_id。另一种方法是启动服务器会话并将用户 ID 存储在会话对象中。后一种方法假设您有一个相对简单的服务器,或者您的集群支持共享会话。

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2013-04-06
    • 2012-10-03
    相关资源
    最近更新 更多