我的公司正在开发一个新的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(当然),但我找不到我需要的信息/解决方案。
(抱歉这个很长的问题)
凯文
答案 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响应:
响应XML只包含身份验证cookie的名称。实际的cookie去了哪里? GIMME MY COOKIE !!!
获取Cookie
事实证明,cookie是在SOAP标头中发送的。如果登录成功,响应的SOAP标题将如下所示:
上面的Set-Cookie字段为我们提供了名为.ASPXAUTH的FBA cookie,值为987A98 .......
使用Cookie
要将cookie用于Web服务请求,我们需要通过添加Cookie字段将其包含在SOAP请求标头中:
您可以通过使用分号分隔名称/值对来包含多个Cookie。一旦设置了.ASPXAUTH cookie,您就可以发送请求,并且应该正常返回响应。
在ISA线后面没有人的土地
具有Forms身份验证的ISA服务器后面的SharePoint站点可以类似地处理。不同之处在于我们必须从ISA服务器而不是SharePoint获取身份验证cookie。这可以通过POST到/CookieAuth.dll?Logon网址来完成。我不会详细介绍细节,但要找出合适的网址和查询字符串并不难。
我原来的博客消失后又重新找到了这个。如果博客消失,这里为子孙后代添加。