Domanda

Sto implementando una consuetudine BCS Modello per ottenere dati da un sistema di back-end. Come gli usi di backend è proprio la gestione degli utenti, sto accedendo attraverso un account di servizio.

Tutto questo funziona bene e mi permette di estrarre i dati in SharePoint. Tuttavia perché è incanalata attraverso l'account di servizio, tutti possono accedervi, che è male.

qualcuno può darmi alcuni consigli che metodo per implementare? Il backend non mi dà NT ACL, ma mi chiedo se potessi semplicemente "falso" in qualche modo? (In sostanza dicendo "Questo gruppo NT ha accesso in lettura" è abbastanza buono).

Sono consapevole ISecurityTrimmer2 per i risultati della ricerca, ma idealmente voglio la sicurezza copertura all'interno del modello BCS in modo che essa si applica alle liste esterne pure. Voglio evitare di utilizzare Archiviazione sicura e mappare ogni singolo utente al backend.

È stato utile?

Soluzione

qui . Posso impostare un campo nel modello BCS ad essere il WindowsSecurityDescriptorField e poi posso usare il codice personalizzato nei miei metodi BCS per creare un 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;
}

Questo funziona bene e mi permette di creare ACL personalizzati, una volta ho tradotto utenti tra il sistema di backend e Active Directory.

Sono ancora interessato a sapere se qualcuno ha un altro modo se avere la sicurezza come parte del modello BCS.

Altri suggerimenti

Se si vuole evitare di archiviazione sicura, suona come l'unica scelta è PassThrough. Il problema è che non è possibile utilizzare NTLM. È necessario utilizzare Kerberos perché NTLM non consente per la delega di identità dal momento che si sta passando le credenziali dall'utente al server SharePoint al sistema esterno. In utilizzando Kerberos per la delega di identità, è necessario creare uno SPN (Service Principle Name) per il servizio in modo che AD sa che è consentito delegare identità.

Autenticazione a Your sistema esterno

Creare nomi principali di servizio per le applicazioni Web che utilizzano l'autenticazione Kerberos in questo articolo per la creazione di uno SPN.

Io sto usando un approccio un po 'diverso. Se il codice .NET oggetti per recuperare i dati dal sistema esterno, è possibile accedere all'oggetto SPContext per controllare quale sito si è in, o quale utente sta interrogando i dati. Nel codice, è possibile utilizzare queste informazioni per filtrare i dati qualsiasi cosa che ti piace.

Quindi, la stessa istanza di un elenco esterno sul tuo sito di SharePoint potrebbe restituire 5 risultati per l'uso A, ma 10 risultati per l'utente B sulla base di un nome utente o l'appartenenza al gruppo, forse. Non che difficile da attuare e funziona in realtà piuttosto bene.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top