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

时间:2011-07-19 19:47:01

标签: web-services soap sharepoint-2010 soapui

我的公司正在开发一个新的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>

问题是我的XML响应在使用soapUI执行此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

我猜我需要以某种方式使用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>

然后我的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

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

(抱歉这个很长的问题)

凯文

1 个答案:

答案 0 :(得分:0)

在温暖,模糊的.Net世界......

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

在.Net中,它非常简单。实际上,这是一篇包含代码示例的MSDN文章,所有文章都精确地指明了这一点。总之,您首先在Authentication.asmx上调用Login方法,并在将来的所有Web服务请求中使用返回的cookie。

外部.Net

一个黑暗而暴风雨的夜晚,我冒险进入非微软世界。无人的土地。如果没有.Net生成的Web服务代理,我们就会使用自己的SOAP消息与SharePoint Web服务进行通信。

我的饼干在哪里?

如果没有.Net代理,您就不能像MSDN文章所建议的那样使用CookieContainer。 Authentication.asmx对Login的描述显示以下SOAP响应: enter image description here

响应XML只包含身份验证cookie的名称。实际的cookie去了哪里? GIMME MY COOKIE !!!

获取Cookie

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

enter image description here 上面的Set-Cookie字段为我们提供了名为.ASPXAUTH的FBA cookie,值为987A98 .......

使用Cookie

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

enter image description here

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

在ISA线后面没有人的土地

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

我原来的博客消失后又重新找到了这个。如果博客消失,这里为子孙后代添加。

New blog location.

Author Bio