NetworkCredentials的用户权限掩码

时间:2012-07-10 10:05:49

标签: c# sharepoint wss-3.0 networkcredentials

虽然我目前正在我们的Sharepoint服务器上开发这个WinForms应用程序,但我打算让已完成的程序从域上的任何计算机上运行。我正在使用WSS Web服务从Sharepoint获取我使用的所有信息。

我已经编写了一些代码来检查Sharepoint Permission掩码,对掩码使用逻辑OR,因为它覆盖了所有权限但是我无法返回当前用户的Sharepoint掩码。我希望用户能够通过Windows身份验证直接登录,这是我的直接想法。

NetworkCredential credentails = CredentialCache.DefaultNetworkCredentials;
var userInfo = userGroupService.GetUserInfo(credentails.UserName);

但是,虽然我能够使用DefaultNetworkCredentials返回整个Sharepoint站点的权限集合(如下面的代码段),但属性是空字符串,因此我无法使用它来获取UserName。

permissionService.Credentials = CredentialCache.DefaultNetworkCredentials;
permissionService.Url = "http://localhost/mySite/_vti_bin/Permissions.asmx";
// Web service request works
XmlNode node = permissionService.GetPermissionCollection(siteName, "Web");
// But I need to identify current user from this collection somehow still

我读到Windows身份验证遭遇double-hop issue,我想避免这种情况,但是正在我在服务器上开发Sharepoint& IIS正在运行,我看不出这会立即引发问题。

有没有办法绕过这个或更好的方式来获取当前用户的权限掩码?

2 个答案:

答案 0 :(得分:2)

如果wss的当前用户将始终与当前登录到PC的用户相同

var userInfo = userGroupService.GetUserInfo(Environment.UserDomainName +@"\"+ Environment.UserName);

或获取当前登录用户的权限

XmlNode currentUserPermission = userGroupService.GetRolesAndPermissionsForCurrentUser();

答案 1 :(得分:0)

您正在处理身份验证无法超出一个远程主机的问题;这被称为“一跳”限制。

要解决此问题,您必须进入“受限制的委派”,其中计算机/帐户被明确授权从另一台计算机/帐户接收和接受身份验证凭据。这是在Active Directory中通过在委派的“结束”上定义适当的服务主体名称(SPN)来设置的。

您可以获得有关约束委派here.

的更多详细信息 祝你好运! CD可能会有点痛苦,所以要小心谨慎。