Frage

Ich bin die Implementierung eines benutzerdefinierten BCS Modelldaten aus einem Backend-System zu erhalten. Da die Back-End-Anwendungen eine eigene Benutzerverwaltung ist, ich bin es durch ein Dienstkonto zugreifen.

All dies funktioniert gut und ermöglicht es mir, Daten in Sharepoint zu ziehen. Jedoch, weil es durch das Dienstkonto kanalisiert ist, jeder kann darauf zugreifen, was schlecht ist.

Kann jemand geben Sie mir einige Tipps, die Methode zu implementieren? Das Backend gibt mir nicht NT ACLs, aber ich frage mich, sie irgendwie, wenn ich könnte nur „fake“? (Im Wesentlichen sagen: „Diese NT-Gruppe hat Lesezugriff“ ist gut genug).

Ich bin mir dessen bewusst ISecurityTrimmer2 für Suchergebnisse, sondern im Idealfall möchte ich Abdeckung Sicherheit innerhalb des BCS Modell so, dass es auch auf externe Listen gilt. Ich möchte mit Sichere Speicherung und Zuordnung jedes einzelnen Benutzers an das Backend vermeiden.

War es hilfreich?

Lösung

Got eine Antwort hier . Ich kann ein Feld in dem BCS Modell setze die WindowsSecurityDescriptorField zu sein, und dann kann ich benutzerdefinierten Code in meinen BCS Methoden verwenden, um eine ACLs zu erstellen:

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;
}

Das funktioniert gut und ermöglicht es mir, benutzerdefinierte ACLs zu erstellen, sobald ich die Benutzer zwischen dem Backend-System und Active Directory übersetzt.

Ich bin immer noch daran interessiert zu hören, wenn jemand eine andere Art und Weise hat Sicherheit als Teil des BCS Modell, wenn mit.

Andere Tipps

Wenn Sie Secure Store vermeiden wollen, es klingt wie Ihre einzige Wahl ist Pass-Through. Der Haken ist, dass Sie nicht NTLM verwenden können. Sie müssen Kerberos verwenden, da NTLM nicht für Identitäts Delegation erlaubt, da Sie die Anmeldeinformationen von dem Benutzer zu dem Sharepoint-Server an das externe System übergeben. Bei der Verwendung von Kerberos für die Identität Delegation, benötigen Sie einen SPN (Service Principle Name) für den Dienst zu schaffen, damit AD weiß, dass es Identitäten delegieren darf.

Authentifizierung an Ihre externes System

Siehe Erstellen von Dienstprinzipalnamen für Ihre Webanwendungen mit Kerberos-Authentifizierung ein SPN zu schaffen.

Ich bin mit einem etwas anderen Ansatz. Wenn Sie Code .NET die Daten von Ihrem externen System abgerufen werden Objekte, können Sie das SPContext Objekt zugreifen auf prüfen, welche Seite du bist auf, oder welcher Benutzer die Daten abfragt. In Code, können Sie diese Informationen verwenden, um die Daten zu filtern, jeder, was Ihnen gefällt.

So genau die gleiche Instanz von einer externen Liste auf dem Sharepoint-Site könnte zurückkehren 5 Ergebnisse für A, aber 10 Ergebnisse für Benutzer B auf Basis von Benutzername oder vielleicht Gruppenmitgliedschaft. Nicht so schwer zu implementieren und tatsächlich funktioniert ziemlich gut.

Schauen Sie sich http://jsiegmund.wordpress.com/2010/05/19/creating-secured-bcs-objects-with-bcs-meta-man/ .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top