【问题标题】:URL fragment missing from redirect URI重定向 URI 中缺少 URL 片段
【发布时间】:2013-07-23 12:54:54
【问题描述】:

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

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

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

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

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

mylocalserver.com=localhost

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

问题在于,在获得传入连接时,即从在重定向上启动它的浏览器,当我从套接字读取数据时,我看到片段部分丢失! eg:对于上面的本地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 标头中。但我也没有看到。

知道片段丢失的原因以及如何取回/指示浏览器发送片段吗?

【问题讨论】:

    标签: qt url redirect browser oauth-2.0


    【解决方案1】:

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

    【讨论】:

    • 你是对的,正如 OAuth 2 草案规范中提到的那样,片段部分由“用户代理”保留:tools.ietf.org/html/draft-ietf-oauth-v2-15#section-4.2 但是,仍然需要一个网络服务器作为用户代理应该对来自授权服务器的重定向起作用。不过,我不知道“用户代理”如何保留 URI 片段。他们期待一些定制的“浏览器”吗?目前,我只是打开用户为打开 Facebook 登录对话框(用于 OAuth)而配置的任何默认浏览器。谢谢。
    • 没有网络服务器通常与隐式流一起使用。重定向被拦截,您使用客户端 javascript 来提取令牌。
    • 谢谢欧金尼奥。我将尝试使用我的自定义用户代理拦截重定向。
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2011-01-18
    • 2014-09-04
    • 2020-12-08
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多