在自定义BCS / .net类上实现安全性?

时间:2010-04-07 23:11:45

标签: .net sharepoint-2010 bcs

我正在实现自定义BCS模型以从后端系统获取数据。由于后端使用自己的用户管理,我通过服务帐户访问它。

所有这些都运行良好,并允许我将数据提取到SharePoint。但是因为它是通过服务帐户引导的,所以每个人都可以访问它,这很糟糕。

任何人都可以给我一些方法来实现吗?后端没有给我NT ACL,但我想知道我是否可以以某种方式“伪造”它们? (基本上说“这个NT组具有读取权限”已经足够了)。

我知道搜索结果的ISecurityTrimmer2,但理想情况下我想要涵盖BCS模型中的安全性,以便它也适用于外部列表。我想避免使用安全存储并将每个用户映射到后端。

3 个答案:

答案 0 :(得分:2)

得到答案here。我可以将BCS模型中的字段设置为WindowsSecurityDescriptorField,然后我可以在我的BCS方法中使用自定义代码来创建ACL:

Byte[] GetSecurityDescriptor(string domain, string username)
{
    NTAccount acc = new NTAccount(domain, username);
    var sid = (SecurityIdentifier)acc.Translate(typeof(SecurityIdentifier));
    CommonSecurityDescriptor sd = new CommonSecurityDescriptor(false, false,
        ControlFlags.None,sid,null, null, null);
    sd.SetDiscretionaryAclProtection(true, false);

    //Deny access to everyone
    SecurityIdentifier everyone = new SecurityIdentifier(
        WellKnownSidType.WorldSid, null);
    sd.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, everyone, 
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    //Grant full access to specified user
    sd.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid,
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    byte[] secDes = new Byte[sd.BinaryLength];
    sd.GetBinaryForm(secDes, 0);

    return secDes;
}

这很有效,并允许我在后端系统和Active Directory之间翻译用户后创建自定义ACL。

如果将安全性作为BCS模型的一部分,我仍然有兴趣听听是否有人采用其他方式。

答案 1 :(得分:0)

如果你想避免使用Secure Store,听起来你唯一的选择就是PassThrough。问题是您无法使用NTLM。您必须使用Kerberos,因为NTLM不允许身份委派,因为您将凭据从用户传递到SharePoint服务器到外部系统。在使用Kerberos进行身份委派时,您需要为服务创建一个SPN(服务主体名称),以便AD知道允许委派身份。

Authenticating to Your External System

请参阅本文中的Create Service Principal Names for your Web applications using Kerberos authentication以了解如何创建SPN。

答案 2 :(得分:0)

我使用的方法有所不同。如果编写.NET对象以从外部系统检索数据,则可以访问SPContext对象以检查您所在的站点或哪个用户正在查询数据。在代码中,您可以使用该信息按照您喜欢的方式过滤数据。

因此,SharePoint网站上的外部列表的完全相同的实例可能会返回5个结果以供使用A,但是根据用户名或组成员身份返回10个结果。实现起来并不是很难实现。

查看http://jsiegmund.wordpress.com/2010/05/19/creating-secured-bcs-objects-with-bcs-meta-man/