3

以下代码在 Chrome、Firefox 和 Komodo Dragon 中运行良好。我什至是全新安装的 firefox(证明我没有通过 FB 或任何东西的身份验证)。它在 IE 中不起作用。Chrome、FF 和 dragon 都会导致带有有效 access_token 的警报。IE 导致“拒绝访问”。我已经尝试过 GET 和 POST,两者都有相同的结果。

    function getWallPosts() {
        $.ajax({
            url: 'https://graph.facebook.com/oauth/access_token?client_id=<facebookid>&client_secret=<secretcode>&grant_type=client_credentials',
            type: 'POST',
            success: function (data) {
                alert(data)
            },
            error: function (a, b, c) {
                alert(a + ' ' + b + ' ' + c);
            }
        });
    };

编辑:附加信息*

我尝试按照评论中的建议使用 XDomainRequest,但是我仍然仅在 IE 中收到拒绝访问。我相信这就是原因:

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

请求必须针对与托管页面相同的方案

此限制意味着如果您的 AJAX 页面位于 http://example.com,那么您的目标 URL 也必须以 HTTP 开头。同样,如果您的 AJAX 页面位于https://example.com,那么您的目标 URL 也必须以 HTTPS 开头。

阻止 HTTPS 页面对基于 HTTP 的资源发出 XDomainRequest 绝对是我们的意图,因为这种情况会带来许多开发人员和大多数用户不理解的混合内容安全威胁。

但是,此限制过于宽泛,因为它会阻止 HTTP 页面发出针对 HTTPS 页面的 XDomainRequest。虽然 HTTP 页面本身可能已被破坏,但没有理由禁止它安全地接收公共资源。

最糟糕的是,Same Scheme 限制意味着 Web 开发人员使用 file:// 方案在本地测试他们的页面会发现所有 XDomainRequest 都被阻止,因为 file:// 不匹配 http:// 或 https:/ /,这是唯一有效的目标方案(第 1 点)。要解决此问题,Web 开发人员必须在本地 Web 服务器(例如 IIS、Visual Studio 托管服务器等)上托管他们的页面。

要解决此限制,您可以构建 postMessage-Proxy-for-XDR。

我提供的托管包不包含任何 SSL 选项。还有其他人有其他想法吗?

4

1 回答 1

1

答案是对服务器端服务进行 ajax 调用,然后让该服务进行 OAuth 调用。就我而言,我使用了 asp.net ASMX 服务。它也可以是 PHP 或任何东西。现在正在工作。

于 2012-05-20T23:34:40.237 回答