代码之家  ›  专栏  ›  技术社区  ›  LVS

如何从SharePoint Web部件进行跨域Ajax Post调用?

  •  2
  • LVS  · 技术社区  · 15 年前

    我需要调用一个(HTTP)RESTAPI作为后期调用——基本上,它允许我向论坛/社区发布消息。

    由于目前没有通过API进行身份验证的方法,所以我需要依赖浏览器cookie。也就是说,让用户登录到社区,然后使用API调用。这意味着,服务器代理被排除在外。

    因为这是一个电话后, JSONP 也被排除在外,即使API的服务器支持它。

    所以这个post调用需要是100%的javascript。

    这个JS最终将成为SharePoint中Web部件的一部分,因此我不想用iframes使其复杂化。

    好?

    1 回复  |  直到 15 年前
        1
  •  3
  •   bobince    15 年前

    跨域发布的唯一方法是编写表单脚本:

    <iframe name="iframe"></iframe>
    <form id="foo" target="iframe" method="POST" action="http://...">
        <input type="hidden" name="parameter 1" value="bar"/>
        ...
    </form>
    <script type="text/javascript">
        ...
        document.getElementById('foo').submit();
    </script>
    

    由于同一源站策略,您将无法读取iframe中的响应,但将进行发布。

    任何知道它在做什么的论坛都会拒绝这个请求。否则,任何访问过第三方网站的人都可以被强制自动发布到论坛上。这被称为跨站点请求伪造(XSRF),是一个长期存在的Web安全问题。大多数论坛管理员会认为上述代码是恶意的。

    安全论坛使用anti-xsrf per action token来防止上述情况,基本上要求从站点本身的表单而不是从第三方站点进行发布。由于您不能阅读跨域文档,因此不能捏住令牌,因此无法授权发布。