您的位置:首页 > 其它

SharePoint Web Service的身份验证

2008-11-10 17:38 399 查看
WebPart中对SharePoint Web Service的身份验证(Form Authentication)

主要是拿到Request中的Cookie(system.web.HttpCookie)转换成CookieContainer中需要的Cookie(system.net.Cookie)

假设我们使用最常用的lists.asmx来获取SharePoint列表数据,添加的Web引用的命名空间是spwsList

Dim serviceURL As String = SPContext.Current.Site.OpenWeb.Site.Url & "/_vti_bin/lists.asmx"

Dim server As spwsList.Lists = Nothing

server = New spwsList.Lists

server.CookieContainer = New Net.CookieContainer

For i As Integer = 0 To Me.Context.Request.Cookies.Count - 1

Dim c As Web.HttpCookie = Me.Context.Request.Cookies(i)

If c.Name.ToUpper = ".ASPXAUTH" Then

Dim coo As New Net.Cookie(c.Name, c.Value, c.Path)

server.CookieContainer.Add(New Uri(serviceURL), coo)

Exit For

End If

Next

Return server

--------------------以下转载自http://blog.joycode.com/erucy/archive/2008/07/28/115205.aspx--------------------

SharePoint内置了一套相对比较完整的Web Services提供给开发者,这样就可以在客户端、跨平台的程序中读取甚至修改SharePoint中的内容。不过当SharePoint网站不允许匿名访问的时候,调用Web Services自然也需要提供身份验证。

SharePoint身份验证最常用的是Windows验证(Windows Authentication)和表单验证(Form Authentication)两种。

Windows验证即使用Windows账号或者AD账号来进行身份验证,对于这种验证方式,在SharePoint SDK中已经给出了如何提供身份验证的方法,假设我们使用最常用的lists.asmx来获取SharePoint列表数据,添加的Web引用的命名空间是spwsList:

使用当前帐户身份:
1 spwsList.Lists wsLists = new spwsList.Lists();
2 wsLists.Credentials = CredentialCache.DefaultCredential;
3 Console.WriteLine(wsLists.GetListCollection().OuterXml);


使用指定帐户:
1 spwsList.Lists wsLists = new spwsList.Lists();
2 wsLists.Credentials = new NetworkCredential("username", "password", "domain");
3 Console.WriteLine(wsLists.GetListCollection().OuterXml);


上面的CredentialCache、NetworkCredential都是在System.Net命名空间下。

表单认证是SharePoint 2007新加入的一种身份认证方式,其后台是使用.Net Framework中的Membership机制进行用户身份的识别,对于外网来说,大都是使用表单认证的方式来实现的。在使用表单认证的SharePoint网站中通过Web Service获取数据稍微麻烦一些,不过也可以通过SharePoint提供的表单认证Web Service来创建用户身份相关的Cookie。

表单认证Web Service的地址是:http://[server]/[site]/_vti_bin/authentication.asmx

在使用Web Service的程序中再次加入上面这个Web引用,假设其命名空间是spwsAuth,那么使用表单认证构造身份并访问数据的代码实例如下:

1 spwsAuth.Authentication auth = new spwsAuth.Authentication();
2 auth.CookieContainer = new CookieContainer();
3 auth.AllowAutoRedirect = true;
4 spwsAuth.LoginResult lr = auth.Login("username", "password");
5 if (lr.ErrorCode == spwsAuth.LoginErrorCode.NoError)
6 {
7     spwsList.Lists wsList = new spwsList.Lists();
8     wsList.CookieContainer = auth.CookieContainer;
9     XmlNode res = wsList.GetListCollection();
10     Console.WriteLine(res.OuterXml);
11 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: