Protezione di Enterprise Services

Utilizzo della protezione basata sui ruoli mediante Enterprise Services

In questa pagina
ObiettiviObiettivi
Ambito di applicazioneAmbito di applicazione
Utilizzo del moduloUtilizzo del modulo
RiepilogoRiepilogo
Conoscenze necessarieConoscenze necessarie
Creazione di un'applicazione Libreria di classi per ospitare il componente servitoCreazione di un'applicazione Libreria di classi per ospitare il componente servito
Creazione del componente servitoCreazione del componente servito
Configurazione del componente servitoConfigurazione del componente servito
Generazione di un nome sicuro per l'assemblyGenerazione di un nome sicuro per l'assembly
Creazione dell'assembly e relativa aggiunta nella cache assembly globaleCreazione dell'assembly e relativa aggiunta nella cache assembly globale
Registrazione manuale del componente servitoRegistrazione manuale del componente servito
Analisi dell'applicazione configurataAnalisi dell'applicazione configurata
Creazione di un'applicazione client di provaCreazione di un'applicazione client di prova

Obiettivi

Il modulo consente di:

Creare un componente servito che utilizza i ruoli ES per limitare il numero di utenti in grado di accedere alla funzionalità di tale componente.

Ambito di applicazione

Le informazioni contenute in questo modulo sono valide per i seguenti prodotti e tecnologie:

Microsoft® Windows® XP o Windows 2000 Server con Service Pack 3 e sistemi operativi successivi

Microsoft .NET Framework versione 1.0 con Service Pack 2

Microsoft Visual C#® .NET

Utilizzo del modulo

Per trarre il massimo vantaggio dal modulo:

È necessario aver acquisito esperienza nell'utilizzo di Visual C# .NET e Microsoft Visual Studio® .NET.

È necessario aver acquisito esperienza nello sviluppo e nell'implementazione di componenti serviti eseguiti nel contesto di Enterprise Services (COM+).

È necessario aver acquisito esperienza nella gestione di componenti serviti mediante lo strumento di amministrazione Servizi componenti.

È necessario conoscere la procedura di gestione dell'appartenenza degli account utente di Windows ai gruppi mediante l'utilizzo degli strumenti di amministrazione di Windows.

Leggere il modulo 9 "Protezione di Enterprise Services". Vi vengono descritte le funzionalità di protezione di Enterprise Services e le funzionalità specifiche disponibili per la protezione dei componenti serviti.

Riepilogo

Enterprise Services (COM+) rappresenta una struttura estesa di protezione utilizzabile per implementare il controllo granulare degli utenti in grado di accedere alle funzionalità dei componenti serviti sviluppati.

In questo modulo viene descritto come creare un semplice componente servito che utilizza i ruoli ES per l'autorizzazione a livello di metodo.

Conoscenze necessarie

Prima di utilizzare questo modulo, tenere presente quanto segue:

I ruoli ES (Enterprise Services) non sono identici ai ruoli .NET.

I ruoli ES possono contenere gruppi di Windows o account utente di Windows.

I ruoli ES vengono gestiti nel catalogo COM+.

I ruoli ES possono essere applicati a livello di applicazione, interfaccia, classe o metodo ES.

I ruoli ES possono essere configurati parzialmente in modo dichiarativo utilizzando gli attributi .NET nell'assembly del componente servito.

I gruppi e gli account utente di Windows possono essere aggiunti da un amministratore durante la distribuzione.

Gli amministratori possono utilizzare lo strumento di amministrazione o script Servizi componenti.

Per utilizzare in modo efficace la protezione basata sui ruoli di Enterprise Services da un'applicazione Web ASP.NET, è necessario che quest'ultima utilizzi l'autenticazione di Windows e rappresenti i chiamanti prima di chiamare i componenti serviti.

Creazione di un'applicazione Libreria di classi per ospitare il componente servito

Questa procedura consente di creare una nuova applicazione Libreria di classi C# contenente il componente servito.

Per creare un'applicazione Libreria di classi C# per ospitare il componente servito

1.

Avviare Visual Studio .NET e creare una nuova applicazione Libreria di classi C# denominata ServicedCom.

2.

Rinominare il file di classe predefinito Class1.cs come SimpleComponent.cs.

3.

Fare doppio clic su SimpleComponent.cs per aprirlo e rinominare il tipo Class1 come SimpleComponent. Aggiornare inoltre il nome del costruttore predefinito della classe.

Creazione del componente servito

Questa procedura consente di derivare la classe SimpleComponent dalla classe EnterpriseServices.ServicedComponent per trasformare questo tipo in un componente servito. Quindi verrà creata un'interfaccia da implementare all'interno della classe SimpleComponent. Per utilizzare la protezione a livello di interfaccia e di metodo, è necessario definire e implementare le interfacce.

Per creare il componente servito

1.

Aggiungere un riferimento all'assembly System.EnterpriseServices.

2.

Aggiungere l'istruzione using riportata di seguito all'inizio del file SimpleComponent.cs, sotto le istruzioni using esistenti.

using System.EnterpriseServices; 

3.

Derivare la classe SimpleComponent da ServicedComponent.

public class SimpleComponent : ServicedComponent 

4.

Aggiungere la definizione di interfaccia riportata di seguito all'interno dello spazio dei nomi ServicedCom.

public interface ISomeInterface 
{ 
  int Add( int operand1, int operand2 ); 
} 

5.

Derivare SimpleComponent da questa interfaccia.

public class SimpleComponent : ServicedComponent, ISomeInterface 

6.

Implementare l'interfaccia all'interno della classe SimpleComponent come indicato di seguito.

public int Add( int operand1, int operand2 ) 
{ 
    return operand1 + operand2; 
} 

Configurazione del componente servito

Questa procedura consente di configurare il componente servito per la protezione basata sui ruoli a livello di metodo.

Per configurare il componente servito

1.

Aggiungere gli attributi riportati di seguito direttamente sopra la classe SimpleComponent. L'attributo ComponentAccessControl attiva i controlli di accesso a livello di componente, mentre l'attributo SecureMethod attiva i controlli di accesso a livello di metodo.

[ComponentAccessControl] 
[SecureMethod] 
public class SimpleComponent : ServicedComponent, ISomeInterface 

2.

Aggiungere l'attributo riportato di seguito sopra il metodo Add per creare il ruolo Manager e associarlo al metodo.

[SecurityRole("Manager")] 
public int Add( int operand1, int operand2 ) 
{ 
  return operand1 + operand2; 
} 

3.

Aprire assemblyinfo.cs e aggiungere la seguente istruzione using all'inizio del file, sotto le istruzioni using esistenti.

using System.EnterpriseServices; 

4.

Spostarsi nella parte inferiore del file e aggiungere gli attributi riportati di seguito, i quali sono utilizzati per configurare l'applicazione di Enterprise Services in modo che ospiti il componente servito.

// Configure the application as a server (out-of-process) application 
[assembly: ApplicationActivation(ActivationOption.Server)] 
// For meaningful role-based security, enable access checking at the process  
// and component levels by using the following .NET attribute. 
[assembly: ApplicationAccessControl(AccessChecksLevel=  
                        AccessChecksLevelOption.ApplicationComponent)] 
// Set the name and description for the application 
[assembly: ApplicationName("SimpleRoles")] 
[assembly: Description("Simple application to show ES Roles")] 
// Add some additional roles 
[assembly:SecurityRole("Employee")] 
[assembly:SecurityRole("Senior Manager")] 

Generazione di un nome sicuro per l'assembly

Gli assembly che ospitano componenti serviti devono disporre di nomi sicuri. Questa procedura consente di generare una coppia di chiavi pubblica-privata utilizzata per assegnare un nome sicuro all'assembly.

Per generare un nome sicuro per l'assembly

1.

Aprire una finestra di comando e passare alla directory del progetto corrente.

2.

Mediante l'utilità sn.exe generare un file di chiave contenente una coppia di chiavi pubblica-privata.

sn.exe -k SimpleComponent.snk 

3.

In Visual Studio aprire assemblyinfo.cs.

4.

Individuare l'attributo [AssemblyKeyFile] e modificarlo in modo che faccia riferimento al file di chiave nella directory di progetto come indicato di seguito.

[assembly: AssemblyKeyFile(@"..\..\SimpleComponent.snk")] 

Creazione dell'assembly e relativa aggiunta nella cache assembly globale

Questa procedura consente di creare l'assembly contenente il componente servito e di aggiungerlo quindi nella cache assembly globale. In genere, i componenti serviti vengono registrati nella cache assembly globale in quanto sono risorse a livello di sistema. I componenti serviti ospitati in applicazioni server COM+ richiedono l'installazione nella cache assembly globale, mentre tale operazione non è necessaria (sebbene sia consigliata) per le applicazioni di libreria.

Per creare l'assembly e aggiungerlo nella cache assembly globale

1.

Scegliere Genera soluzione dal menu Genera.

2.

Tornare alla finestra di comando ed eseguire il comando riportato di seguito per aggiungere l'assembly alla cache assembly globale.

gacutil -i bin\debug\ServicedCom.dll 

Registrazione manuale del componente servito

I componenti serviti possono essere registrati manualmente mediante lo strumento Regsvcs.exe o automaticamente mediante la registrazione "lazy". Nella registrazione "lazy", la prima volta che viene creata l'istanza del componente servito, viene registrato il componente e viene creata e configurata l'applicazione host COM+ utilizzando i metadati dell'assembly.

Per evitare la riduzione occasionale delle prestazioni associata a tale approccio, questa procedura consente di registrare manualmente il componente servito.

Per registrare manualmente il componente servito

1.

Tornare alla finestra di comando.

2.

Eseguire regsvcs.exe per registrare il componente.

regsvcs bin\debug\ServicedCom.dll 

Analisi dell'applicazione configurata

Questa procedura consente di utilizzare lo strumento Servizi componenti e di esaminare le impostazioni del catalogo create in base agli attributi .NET utilizzati in precedenza.

Per esaminare l'applicazione configurata

1.

Dal gruppo di programmi Strumenti di amministrazione avviare Servizi componenti.

2.

Espandere Servizi componenti, Computer, Risorse del computer e ApplicazioniCOM +.

3.

Fare clic con il pulsante destro del mouse su SimpleRoles, quindi scegliere Proprietà.

4.

Scegliere la scheda Protezione e verificare che la casella di controllo Applica controlli di accesso per questa applicazione sia selezionata e che il livello di protezione sia impostato per eseguire i controlli di accesso a livello di processo e di componente. Questa configurazione è il risultato degli attributi .NET utilizzati in precedenza.

5.

Scegliere OK per chiudere la finestra di dialogo Proprietà.

6.

Espandere l'applicazione SimpleRoles, quindi espandere la cartella Componenti e la classe ServicedCom.SimpleComponent.

7.

Passare al metodo Add sotto il metodo ISomeInterface nella cartella Interfacce.

8.

Fare clic con il pulsante destro del mouse su Add, quindi scegliere Proprietà.

9.

Scegliere la scheda Protezione e osservare che il ruolo Manager sia associato al metodo.

10.

Scegliere OK per chiudere la finestra di dialogo Proprietà.

11.

Espandere la cartella Ruoli sotto l'applicazione SimpleRoles. Osservare i ruoli creati in precedenza mediante gli attributi .NET e inoltre il ruolo Marshaler. Questo viene creato come risultato diretto dell'attributo [SecureMethod] aggiunto in precedenza ed è necessario per la sicurezza a livello di metodo.

Creazione di un'applicazione client di prova

Questa procedura consente di creare un'applicazione client di prova basata su Windows Forms per creare un'istanza e chiamare il componente servito.

Per creare un'applicazione client di prova

1.

Aggiungere una nuova applicazione per Windows C# denominata TestClient alla soluzione corrente.

2.

Aggiungere un nuovo riferimento al progetto nel progetto ServicedCom.

1.

In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.

2.

Scegliere la scheda Progetti.

3.

Selezionare ServicedCom, quindi scegliere Seleziona e infine OK.

3.

Aggiungere un riferimento a System.EnterpriseServices.

4.

Aggiungere un pulsante al modulo principale dell'applicazione.

5.

Fare doppio clic sul pulsante per creare un gestore eventi ButtonClick.

6.

Aggiungere l'istruzione using riportata di seguito all'inizio di form1.cs, sotto le istruzioni using esistenti.

using ServicedCom; 

7.

Tornare al gestore eventi ButtonClick e aggiungere il codice riportato di seguito per creare un'istanza e chiamare il componente servito.

SimpleComponent comp = new SimpleComponent(); 
MessageBox.Show( "Result is: " + comp.Add(1, 2)); 

8.

Scegliere Genera soluzione dal menu Genera.

9.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto TestClient, quindi scegliere Imposta come progetto di avvio.

10.

Premere Ctrl+F5 per eseguire l'applicazione TestClient.
Verrà visualizzata l'eccezione non gestita generata.

11.

Scegliere il pulsante Dettagli nella finestra di messaggio per visualizzare i dettagli relativi all'eccezione.
Sarà possibile notare che è stata generata l'eccezione System.UnauthorizedAccessException in quanto l'account di accesso interattivo utilizzato per eseguire l'applicazione TestClient non è un membro del ruolo Manager necessario per chiamare il metodo Add nel componente servito.

12.

Scegliere Esci per chiudere l'applicazione.

13.

Tornare a Servizi componenti e aggiungere l'account interattivo corrente al ruolo Manager e al ruolo Marshaler.

Nota: l'infrastruttura Enterprise Services utilizza un numero di interfacce a livello di sistema esposte da tutti i componenti serviti, tra cui IManagedObject, IDisposable e IServiceComponentInfo. Se vengono attivati i controlli di accesso a livello di interfaccia o di metodo, all'infrastruttura Enterprise Services viene negato l'accesso a tali interfacce.

Di conseguenza, Enterprise Services crea un ruolo speciale denominato Marshaler e lo associa a tali interfacce. In fase di distribuzione, gli amministratori delle applicazioni devono aggiungere al ruolo Marshaler tutti gli utenti che richiedono l'accesso a qualsiasi metodo o interfaccia della classe. È possibile automatizzare tale operazione in due diversi modi:

1. Scrivendo uno script che utilizza il modello a oggetti di Servizi componenti per copiare tutti gli utenti dagli altri ruoli nel ruolo Marshaler.

2. Scrivendo uno script che assegna tutti gli altri ruoli a queste tre speciali interfacce ed eliminando il ruolo Marshaler.

14.

Chiudere l'applicazione SimpleRoles per rendere effettive le modifiche, facendo clic con il pulsante destro del mouse sul nome dell'applicazione e quindi scegliendo Arresta.

15.

Tornare a Visual Studio .NET e premere Ctrl+F5 per eseguire nuovamente l'applicazione TestClient.

16.

Scegliere il pulsante del modulo e verificare che il metodo sia stato chiamato correttamente.


**
In questo articolo
**