SharePoint 2010:从NetSuite使用Web服务 - 403 Forbidden错误

QMK*_*vin 8 soap web-services soapui sharepoint-2010

我的公司正在开发一个新的SharePoint站点,该站点将使用基于表单的身份验证来允许我们的客户登录该站点以获取特定于订户的内容(下载,许可证信息等).

所有这些客户都位于我们的CRM NetSuite中,我们希望客户服务团队更新客户信息并将其分配给FBA角色(角色已添加到SharePoint中的组).

为此,我希望创建SOAP XML文件,NetSuite自己的开发语言SuiteScript可以使用它,它可以发送SOAP请求,进程可以使用响应.

例如:使用soapUI我正在构建以下XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/">
<soapenv:Header/>
  <soapenv:Body>
    <dir:GetUserInfo>
      <dir:userLoginName>myUserName</dir:userLoginName>
    </dir:GetUserInfo>
  </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

问题是,当使用soapUI执行此XML时,我的XML响应是403 FORBIDDEN - Raw响应是:

HTTP/1.1 403 Forbidden
Cache-Control: private, max-age=0
Server: Microsoft-IIS/7.5
SPRequestGuid: 36264ce4-9702-44bb-9693-23852a5e0c99
X-SharePointHealthScore: 1
X-Forms_Based_Auth_Required: http://mySPserver/_layouts/login.aspxReturnUrl=/_layouts/Error.aspx&Source=%2f_vti_bin%2fusergroup.asmx
X-Forms_Based_Auth_Return_Url: http://ec2-devmoss1/_layouts/Error.aspx
X-MSDAVEXT_Error: 917656; Access denied. Before opening files in this location, you must first browse to the web site and select the option to login automatically.
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.4762
Date: Tue, 19 Jul 2011 19:25:47 GMT
Content-Length: 13

403 FORBIDDEN
Run Code Online (Sandbox Code Playgroud)

我猜我需要以某种方式使用XML中的凭据登录,但我该怎么做?我尝试在我的<soapenv:Header>...

<soapenv:Header> 
  <h:BasicAuth xmlns:h="http://soap-authentication.org/basic/2001/10/" SOAP-ENV:mustUnderstand="1"> 
    <Name>user</Name> 
    <Password>password</Password> 
  </h:BasicAuth> 
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)

但随后我的Raw响应成为:

HTTP/1.1 400 Bad Request
Cache-Control: private
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.4762
Date: Tue, 19 Jul 2011 19:43:12 GMT
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何正确地为这个或任何SharePoint Web服务方法形成XML SOAP调用,或者指向一个解释它的文章/问题(带答案)?我尝试使用谷歌搜索和浏览stackoverflow(当然),但我找不到我需要的信息/解决方案.

(抱歉这个很长的问题)

凯文

Joe*_*ton 0

在温暖、模糊的.Net 世界中...

使用 FBA 访问 SharePoint 网站上的 Web 服务需要一些额外的工作。

在.Net 中,这非常简单。事实上,有一篇 MSDN 文章提供了代码示例,并且详细介绍了如何做到这一点。总之,您首先调用 Authentication.asmx 上的 Login 方法,并在以后的所有 Web 服务请求中使用返回的 cookie。

.Net 之外

在一个漆黑的暴风雨之夜,我冒险进入了非微软的世界。无人区。如果没有 .Net 生成的 Web 服务代理,我们将滚动自己的 SOAP 消息来与 SharePoint Web 服务进行通信。

我的饼干在哪里??

如果没有 .Net 代理,您就无法按照 MSDN 文章的建议使用 CookieContainer。Authentication.asmx 的登录描述显示以下 SOAP 响应: 在此输入图像描述

响应 XML 仅包含身份验证 cookie 的名称。实际的 cookie 去了哪里?给我我的饼干!

获取cookie

事实证明 cookie 是在 SOAP 标头中发送的。如果登录成功,响应的 SOAP 标头将如下所示:

在此输入图像描述 上面的 Set-Cookie 字段为我们提供了名为 .ASPXAUTH 的 FBA cookie,其值为 987A98.......

使用cookie

要将 cookie 用于 Web 服务请求,我们需要通过添加 Cookie 字段将其包含在 SOAP 请求标头中:

在此输入图像描述

您可以通过用分号分隔名称/值对来包含多个 cookie。设置 .ASPXAUTH cookie 后,您就可以发送请求,并且应该正常返回响应。

ISA 防线后方的无人区

可以类似地处理具有表单身份验证的 ISA 服务器后面的 SharePoint 站点。不同之处在于我们必须从 ISA 服务器而不是 SharePoint 获取身份验证 cookie。这可以通过 POST 到 /CookieAuth.dll?Logon url 来完成。我不会详细介绍,但找出要使用的适当 url 和查询字符串应该不难。


原来的博客消失然后又出现后,我又发现了这个。为后代添加此内容,以防博客消失。

新的博客位置。

作者简介