请求提供SharePoint 2010认证的SOAP action URL及认证方案
嘿,刚好对SharePoint 2010的SOAP认证这块熟得很,我给你拆解清楚,包括对应的Action URL、认证思路和具体操作步骤~
一、常用的认证SOAP Action URL
SharePoint 2010的SOAP认证主要分两种场景,对应的Action URL也不一样:
1. 表单基础认证(FBA)专属Action
如果你用的是表单登录的认证方式,需要调用Authentication.asmx服务的Login方法,对应的SOAP Action是:
http://schemas.microsoft.com/sharepoint/soap/Login
服务的请求URL是:http://你的SharePoint站点地址/_vti_bin/Authentication.asmx
2. Windows身份验证场景
Windows认证(NTLM/Kerberos)不需要专门的SOAP Action来做认证——它是在HTTP请求层面完成身份协商的。像Lists.asmx、Webs.asmx这类常用SOAP服务,直接在请求里带Windows凭据就行,不用单独调用认证接口。
二、核心认证思路
1. Windows身份验证思路
这种场景下,核心是让HTTP请求自动完成NTLM/Kerberos的握手流程:
- 不用单独发认证请求,直接在调用SOAP服务时,把Windows域账号的凭据(域名、用户名、密码)附加到HTTP请求里。
- 底层由你的HTTP客户端(比如C#的
HttpClient、Java的HttpURLConnection)自动处理身份协商,不用手动写认证逻辑。
2. 表单基础认证(FBA)思路
FBA是基于会话Cookie的认证,流程分两步:
- 第一步:先调用
Authentication.asmx的Login方法,传入用户名密码,获取服务器返回的认证Cookie(比如ASP.NET_SessionId、FedAuth)。 - 第二步:后续所有SOAP请求都带着这些Cookie,服务器就会识别你的身份,允许访问资源。
三、具体操作步骤(分场景)
场景1:Windows身份验证下的SOAP操作
以调用Lists.asmx的GetList方法为例:
- 构造SOAP请求体:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <listName>Documents</listName> </GetList> </soap:Body> </soap:Envelope>
- 设置HTTP请求的SOAP Action为
http://schemas.microsoft.com/sharepoint/soap/GetList(对应方法的Action)。 - 给HTTP请求绑定Windows凭据:比如用C#的话,创建
NetworkCredential实例传入域名、用户名、密码,赋值给HttpClient的DefaultRequestHeaders.Authorization或者WebRequest的Credentials属性。 - 发送请求,服务器会自动完成NTLM认证,返回你要的列表数据。
场景2:表单基础认证(FBA)下的SOAP认证与操作
步骤1:调用Login方法获取认证Cookie
- 请求URL:
http://你的SharePoint站点地址/_vti_bin/Authentication.asmx - SOAP Action:
http://schemas.microsoft.com/sharepoint/soap/Login - 请求体:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Login xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <username>你的FBA账号</username> <password>你的FBA密码</password> </Login> </soap:Body> </soap:Envelope>
- 发送请求后,从响应的
Set-Cookie头里提取ASP.NET_SessionId和FedAuth(如果是基于Claims的FBA)这两个Cookie值。
步骤2:携带Cookie调用其他SOAP服务
比如调用Webs.asmx的GetWeb方法:
- 构造对应的SOAP请求体,设置SOAP Action为
http://schemas.microsoft.com/sharepoint/soap/GetWeb。 - 在HTTP请求头里添加
Cookie字段,格式是:ASP.NET_SessionId=xxx; FedAuth=yyy;(把xxx、yyy换成你刚才提取的实际值)。 - 发送请求,服务器识别Cookie后就会完成认证,返回Web站点的信息。
几个要注意的小细节
- 先确认你的SharePoint站点已经配置了对应的认证方式(Windows或FBA),不然请求肯定会失败。
- FBA的Cookie有有效期,过期后得重新调用
Login方法获取新的。 - 如果是Claims类型的FBA,
FedAuthCookie是加密的,不用手动解析,直接原封不动带在请求里就行。
内容的提问来源于stack exchange,提问作者Sheik Syed Ali
相关产品推荐
相关产品推荐

