【问题标题】:processing request parameters in google Oauth2.0google Oauth2.0中处理请求参数
【发布时间】:2012-05-18 21:17:28
【问题描述】:

我正在尝试在我的 java Web 应用程序中使用 Google OAuth2.0 身份验证机制。但是,我在此过程中遇到了一些基本挑战,为此我在这里寻求帮助 -

我已在 Google API 控制台中注册了我的应用程序,并将登录 url 重定向到我的本地主机应用程序以用于开发目的。在用户对应用程序进行身份验证后,我正在尝试处理 google 在 servlet 中提供的访问令牌 - 但是,我看到来自 google 的 url 如下 - http: //local host:8080//loginProcess#access_token=ya29.AHS6ZQBN-4Snrj6P9i4xPxbCxLLkmbPf3Jc2Dj7eUA72FWIy4&token_type=Bearer&expires_in=3600 servlet 名称为“loginProcess”,请注意后面的 # - 请求参数中有哈希,我无法使用 request.getParameter("access_token") 在 java servlet 中检索它们;

我希望我的问题很清楚 - 如果没有,请告诉我我遗漏的详细信息..

提前谢谢大家!

【问题讨论】:

  • 在loginProcess后面应该是问号(?)而不是#,这样你就可以将值作为请求参数来检索。
  • 完全正确!但是,这就是我从谷歌那里得到的。所以,我的问题是 - 我应该如何解析以“#”而不是“?”开头的请求参数?
  • 你可以在这里做一件事。这只是一个调整。尝试获取它的请求 URL,比如 this.request.getRequestURL().toString()。并检查第一次出现的任何一个 '# ' 或者 '?'根据它们的存在,您可以检索令牌的值。
  • 感谢 Unni V Mana 的回复 - 我已经尝试过了,但我只得到了 servlet 名称的字符串,即 httP://www.localhost:8080/loginProcess,就是这样。我没有带有请求参数的完整字符串
  • 从 google 返回的 localhost 怎么样?

标签: java servlets oauth-2.0


【解决方案1】:

这是客户端应用程序(在浏览器中运行的JavaScript)的正常行为。我不知道这是否是您的实际情况,如果是这样,要处理响应,javascript 是您唯一的选择,来自docs


如果没有,可能你需要将你的授权请求(场景)改为Web Server applications,这种情况下你可以使用request.getParameter("access_token")来处理响应,这种授权的重要参数是response_type=code


此外,从安全角度来看,客户端(Web 浏览器)在检索文档时不应将 URI 片段发送到服务器,例如 from the specs。片段标识符的功能与 URI 的其余部分不同:即,它的处理完全是客户端,没有服务器参与。

【讨论】:

  • 非常感谢......我犯了一个小错误,因为我将 response_type 作为令牌而不是代码发送。
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 2018-05-30
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2017-04-14
  • 2013-07-20
相关资源
最近更新 更多