Come dovrebbe componenti aggiuntivi in ??materia di accesso ristretto AppDomain servizi intensificato

StackOverflow https://stackoverflow.com/questions/4148471

  •  30-09-2019
  •  | 
  •  

Domanda

ho attualmente utilizzato MAF per creare un componente aggiuntivo modello in cui i componenti aggiuntivi vengono caricati in un dominio di applicazione (il permesso Internet) limitato. Ciò significa che il componente aggiuntivo non può chiamare il nostro banca dati che è quello che vogliamo nella maggior parte dei casi, come vogliamo evitare aggiuntivo autori che eseguono qualsiasi domanda direttamente contro il db.

Vogliamo loro di utilizzare una qualche forma di API host che permetterà loro di svolgere alcuni compiti (ad esempio eseguire query o e-mail di invio molto specifico). Qualcuno può dirmi il modo migliore per fare questo?

ho cercato di impostare il dominio di applicazione per trattare l'assembly che contiene l'API host come un trust completo assemblaggio durante l'esecuzione dei componenti aggiuntivi in ??modo limitato, ma ho ancora SecurityExceptions quando tento di aprire una connessione db.

È stato utile?

Soluzione

OK, sono riuscito a risolvere questo problema. Per le persone che hanno bisogno di sapere:

  1. Creare un assieme con l'API host in esso e consentire il componente aggiuntivo di riferimento esso.
  2. Assicurarsi che il gruppo che contiene l'API Host ha l'attributo [AllowPartiallyTrustedCallers] sul a livello di assieme e nome sicuro il gruppo.
  3. Verificare l'API host di montaggio è registrato con il dominio di applicazione come un trust completo di montaggio (vedi http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx su come farlo).
  4. Verificare i metodi sulla Host API che richiedono autorizzazioni scalati sono decorati con il [SecuritySafeCritical] attributo (NET 4).
  5. Richiedi piena fiducia all'inizio di ogni metodo è necessario autorizzazioni di escalation e quindi rimuovere la domanda subito dopo. Il codice che segue un metodo che prende un delegato che sarà eseguito in piena fiducia.

    /// <summary>
    /// Runs the supplied delegate using full trust
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="func"></param>
    /// <returns></returns>
    private static T RunWithFullTrust<T>(Func<T> func)
    {
        //NOTE: This line grants the method full trust
        new PermissionSet(PermissionState.Unrestricted).Assert();
    
    
    
    T result = func();
    
    
    //Undo the grant for full-trust!
    CodeAccessPermission.RevertAssert();
    
    
    return result;
    
    }

Inoltre, prima di caricare i componenti aggiuntivi assicurano che l'API Host viene caricato nel AppDomain ristretta. Questo eviterà eccezioni in cui l'API host assemblea non può essere trovato.

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