0

我正在测试一个基于 Qt 的 OAuth 库(https://github.com/pipacs/o2)。我正在针对作为提供商的Facebook测试 OAuth 2.0。

我正在测试协议的ImplicitGrant流程。在此流程中,如果客户端将 *request_type* 查询参数设置为token,则响应将作为 URL 片段包含并包含访问令牌。

Facebook 在浏览器中成功进行身份验证后,会通过重定向到我提供的 uri 进行响应,并在URL 片段中发送访问令牌。

例如:浏览器被重定向到:

http://mylocalserver.com:8888/#access_token=ABCDE&expires_in=5162322

mylocalserver.com=localhost

我在 Qt 中实现了一个小型 HTTP 服务器,它处理所有此类重定向。

问题是在获得传入连接时,即从在重定向上启动它的浏览器,当我从套接字读取数据时,我看到片段部分丢失了!例如:对于上面的本地 url,我看到的数据是:

获取/HTTP/1.1
主机:127.0.0.1:8888
用户代理:Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:22.0) Gecko/20100101 Firefox/22.0
接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
接受语言:en-US,en;q=0.5
接受编码:gzip,放气
连接:保持活动

如您所见,该片段完全丢失。环顾这个问题,我发现 FF/Chrome 可能会将片段放在Location标头中。但我也没有看到。

关于片段丢失的原因以及如何取回/指示浏览器发送它的任何想法?

4

1 回答 1

0

隐含流旨在用于没有“服务器”的情况。片段(以及其中的访问令牌)将由客户端代码(例如 javascript、本机客户端等)提取。这适用于您无法安全保密的情况。如果可以(如在服务器中),您通常使用授权代码流。GET 到服务器的片段中缺少的片段是预期的。

于 2013-07-23T15:06:06.433 回答