Procedura: Abilitare WIF per un'applicazione del servizio Web WCFHow To: Enable WIF for a WCF Web Service Application

Si applica aApplies To

  • Microsoft® Windows® Identity Foundation (WIF)Microsoft® Windows® Identity Foundation (WIF)

  • Microsoft® Windows® Communication Foundation (WCF)Microsoft® Windows® Communication Foundation (WCF)

RiepilogoSummary

In questa guida procedurale vengono fornite le procedure dettagliate per abilitare WIF in un servizio Web WCF.This How-To provides detailed step-by-step procedures for enabling WIF in a WCF web service. Vengono inoltre fornite le istruzioni su come testare l'applicazione per verificare il corretto funzionamento del servizio Web presentando delle attestazioni quando l'applicazione viene eseguita.It also provides instructions for how to test the application to verify that the web service is correctly presenting claims when the application is run. In questa guida procedurale non sono incluse le istruzioni dettagliate per la creazione di un servizio token di sicurezza (STS, Security Token Service); viene invece utilizzato il servizio token di sicurezza di sviluppo che viene fornito con lo strumento Identity and Access.This How-To does not have detailed instructions for creating a Security Token Service (STS), and instead uses the Development STS that comes with the Identity and Access tool. Il servizio token di sicurezza di sviluppo non esegue una reale autenticazione ed è finalizzato unicamente ai test.The Development STS does not perform real authentication and is intended for testing purposes only. Per completare questa guida procedurale sarà necessario installare Identity and Access Tool.You will need to install the Identity and Access tool to complete this How-To. Questo strumento può essere scaricato dal seguente percorso: Identity and Access ToolIt can be downloaded from the following location: Identity and Access Tool

SommarioContents

  • ObiettiviObjectives

  • PanoramicaOverview

  • Riepilogo dei passaggiSummary of Steps

  • Passaggio 1: creare un semplice servizio WCFStep 1 – Create a Simple WCF Service

  • Passaggio 2: creare un'applicazione client per il servizio WCFStep 2 – Create a Client Application for the WCF Service

  • Passaggio 3: eseguire i test sulla soluzioneStep 3 – Test Your Solution

ObiettiviObjectives

  • Creare un servizio WCF che richiede token pubblicatiCreate a WCF service that requires issued tokens

  • Creare un client WCF che richiede un token da un servizio token di sicurezza e lo passa al servizio WCFCreate a WCF client that requests a token from an STS and passes it to the WCF service

PanoramicaOverview

In questa guida procedurale viene illustrato in che modo uno sviluppatore può utilizzare l'autenticazione federata durante lo sviluppo di servizi WCF.This How-To is intended to demonstrate how a developer can use federated authentication when developing WCF services. Trai i vantaggi derivanti dall'utilizzo della federazione nei servizi WCF sono inclusi:Some of the benefits of using federation in WCF services include:

  1. Factoring della logica dell'autenticazione dal codice del servizio WCFFactoring authentication logic out of WCF service code

  2. Riutilizzo delle soluzioni esistenti di gestione delle identitàRe-using existing identity management solutions

  3. Interoperabilità con altre soluzioni di identitàInteroperability with other identity solutions

  4. Flessibilità e resilienza verso le modifiche futureFlexibility and resilience to future changes

WIF e il corrispondente Identity and Access Tool semplificano lo sviluppo e il test di un servizio WCF utilizzando l'autenticazione con federazione, come mostrato nei passaggi che seguono.WIF and the associated Identity and Access tool make it easier to develop and test a WCF service using federated authentication, as the following steps demonstrate.

Riepilogo dei passaggiSummary of Steps

  • Passaggio 1: creare un semplice servizio WCFStep 1 – Create a Simple WCF Service

  • Passaggio 2: creare un'applicazione client per il servizio WCFStep 2 – Create a Client Application for the WCF Service

  • Passaggio 3: eseguire i test sulla soluzioneStep 3 – Test Your Solution

Passaggio 1: creare un semplice servizio WCFStep 1 – Create a Simple WCF Service

In questo passaggio, verrà creato un nuovo servizio WCF che utilizza il servizio token di sicurezza di sviluppo incluso in Identity and Access Tool.In this step, you will create a new WCF service that uses the Development STS that is included with the Identity and Access tool.

Per creare un semplice servizio WCFTo create a simple WCF service

  1. Avviare Visual Studio come amministratore in modalità con privilegi elevati.Start Visual Studio in elevated mode as administrator.

  2. In Visual Studio fare clic su File, Nuovo e quindi su Progetto.In Visual Studio, click File, click New, and then click Project.

  3. Nella finestra Nuovo progetto fare clic su Applicazione servizio WCF.In the New Project window, click WCF Service Application.

  4. In Nome immettere TestService e fare clic su OK.In Name, enter TestService and press OK.

  5. Fare clic con il pulsante destro del mouse sul progetto TestService in Esplora soluzioni e quindi selezionare Identity and Access.Right-click the TestService project under Solution Explorer, then select Identity and Access.

  6. Verrà visualizzata la finestra Identity and Access.The Identity and Access window appears. In Providers (Provider) selezionare Test your application with the Local Development STS (Testare l'applicazione con il servizio token di sicurezza per lo sviluppo locale) e quindi fare clic su Applica.Under Providers, select Test your application with the Local Development STS, then click Apply. Lo strumento Identity and Access configura il servizio per l'uso di WIF e per l'outsourcing dell'autenticazione al servizio token di sicurezza per lo sviluppo locale (LocalSTS) aggiungendo elementi di configurazione al file Web.config.The Identity and Access Tool configures the service to use WIF and to outsource authentication to the local development STS (LocalSTS) by adding configuration elements to the Web.config file.

  7. Nel file Service1.svc.cs aggiungere una direttiva using per lo spazio dei nomi System.Security.Claims e sostituire il codice esistente con il seguente, quindi salvare il file:In the Service1.svc.cs file, add a using directive for the System.Security.Claims namespace and replace the existing code with the following, then save the file:

    public class Service1 : IService1  
    {  
        public string ComputeResponse(string input)  
        {  
            // Get the caller's identity from ClaimsPrincipal.Current  
            ClaimsPrincipal claimsPrincipal = OperationContext.Current.ClaimsPrincipal;  
    
            // Start generating the output  
            StringBuilder builder = new StringBuilder();  
            builder.AppendLine("Computed by ClaimsAwareWebService");  
            builder.AppendLine("Input received from client:" + input);  
    
            if (claimsPrincipal != null)  
            {  
                // Display the claims from the caller. Do not use this code in a production application.  
                ClaimsIdentity identity = claimsPrincipal.Identity as ClaimsIdentity;  
                builder.AppendLine("Client Name:" + identity.Name);  
                builder.AppendLine("IsAuthenticated:" + identity.IsAuthenticated);  
                builder.AppendLine("The service received the following issued claims of the client:");  
    
                // Iterate over the caller’s claims and append to the output  
                foreach (Claim claim in claimsPrincipal.Claims)  
                {  
                    builder.AppendLine("ClaimType :" + claim.Type + "   ClaimValue:" + claim.Value);  
                }  
            }  
    
            return builder.ToString();  
        }  
    }  
    

    Il metodo ComputeResponse visualizza le proprietà di varie attestazioni che sono pubblicate da LocalSTS.The ComputeResponse method displays the properties of various claims that are issued by LocalSTS.

  8. Nel file IService1.cs sostituire il codice esistente con il seguente, quindi salvare il file:In the IService1.cs file, replace the existing code with the following, then save the file:

    [ServiceContract]  
    public interface IService1  
    {  
        [OperationContract]  
        string ComputeResponse(string input);  
    }  
    
  9. Compilare il progetto.Build the project.

  10. Premere CTRL+F5 per eseguire il servizio senza avviare il debugger.Press Ctrl-F5 to run the service without starting the debugger. Verrà visualizzata una pagina Web per il servizio nella quale è possibile verificare che LocalSTS sia in esecuzione esaminando l'area di notifica (barra delle applicazioni).A Web page should open for the service and you can verify that LocalSTS is running by looking in the notification area (system tray).

    Importante

    Sia TestService sia LocalSTS devono essere in esecuzione quando viene aggiunto il riferimento del servizio all'applicazione client nel passaggio successivo.Both TestService and LocalSTS must be running when you add the service reference to the client application in the next step.

Passaggio 2: creare un'applicazione client per il servizio WCFStep 2 – Create a Client Application for the WCF Service

In questo passaggio, verrà creata un'applicazione console che utilizza il servizio STS di sviluppo per l'autenticazione con il servizio WCF creato nel passaggio precedente.In this step, you will create a console application that uses the Development STS to authenticate with the WCF service you created in the previous step.

Per creare un'applicazione clientTo create a client application

  1. In Visual Studio fare clic con il pulsante destro del mouse sulla soluzione, scegliere Aggiungi e quindi fare clic su Nuovo progetto.In Visual Studio, right-click on the solution, click Add, and then click New Project.

  2. Nella finestra Aggiungi nuovo progetto selezionare Applicazione console nell'elenco dei modelli di Visual C#, immettere Client e quindi scegliere OK.In the Add New Project window, select Console Application from the Visual C# templates list, enter Client, and then press OK. Il nuovo progetto verrà creato nella cartella della soluzione.The new project will be created in your solution folder.

  3. Fare clic con il pulsante destro del mouse su Riferimenti nel progetto Client e quindi scegliere Aggiungi riferimento al servizio.Right-click on References under the Client project, and then click Add Service Reference.

  4. Nella finestra Aggiungi riferimento al servizio fare clic sulla freccia a discesa sul pulsante Individua e fare clic su Servizi nella soluzione.In the Add Service Reference window, click the drop-down arrow on the Discover button and click Services in Solution. Nel campo Indirizzo verrà automaticamente inserito il servizio WCF precedentemente creato e il campo Spazio dei nomi verrà impostato su ServiceReference1.The Address will automatically populate with the WCF service you created earlier, and the Namespace will be set to ServiceReference1. Fare clic su OK.Click OK.

    Importante

    Sia TestService sia LocalSTS devono essere in esecuzione quando viene aggiunto il riferimento del servizio al client.Both TestService and LocalSTS must be running when you add the service reference to the client.

  5. In Visual Studio verranno generate classi proxy per il servizio WCF e verranno aggiunte tutte le informazioni di riferimento necessarie.Visual Studio will generate proxy classes for the WCF service, and add all of the necessary reference information. Verranno inoltre aggiunti elementi al file App.config per configurare il client in modo da ottenere un token dal servizio token di sicurezza per l'autenticazione con il servizio.It will also add elements to the App.config file to configure the client to get a token from the STS to authenticate with the service. Al termine di questo processo verrà aperto il file Program.cs.When this process is finished, the Program.cs file will open. Aggiungere una direttiva using per System.ServiceModel e un'altra per Client.ServiceReference1, sostituire il metodo Main con il codice seguente e quindi salvare il file:Add a using directive for System.ServiceModel and another for Client.ServiceReference1, replace the Main method with the following code, then save the file:

    static void Main(string[] args)  
    {  
        // Create the client for the service  
        Service1Client client = new Service1Client();  
        Console.WriteLine("-------------WCF Client Application--------------\n");  
    
        while (!ShouldQuitApplication())  
        {  
            try  
            {  
                Console.WriteLine(client.ComputeResponse("Hello World"));  
            }  
            catch (CommunicationException e)  
            {  
                Console.WriteLine(e.Message);  
                Console.WriteLine(e.StackTrace);  
                Exception ex = e.InnerException;  
                while (ex != null)  
                {  
                    Console.WriteLine("===========================");  
                    Console.WriteLine(ex.Message);  
                    Console.WriteLine(ex.StackTrace);  
                    ex = ex.InnerException;  
                }  
            }  
            catch (TimeoutException)  
            {  
                Console.WriteLine("Timed out...");  
            }  
            catch (Exception e)  
            {  
                Console.WriteLine("An unexpected exception occurred.");  
                Console.WriteLine(e.StackTrace);  
            }  
        }  
    
        client.Close();  
    
        if (client != null)  
        {  
            client.Abort();  
        }  
    }  
    
    static bool ShouldQuitApplication()  
    {  
        Console.WriteLine("---------------------------------------------------------------------");  
        Console.WriteLine("Press Enter key to invoke service, any other key to quit application:");  
        Console.WriteLine("----------------------------------------------------------------------");  
    
        ConsoleKeyInfo keyInfo = Console.ReadKey();  
        if (keyInfo.Key == ConsoleKey.Enter)  
            return false;  
        return true;  
    }  
    
  6. Aprire il file App.config e aggiungere il seguente codice XML come primo elemento figlio sotto l'elemento <system.serviceModel>, quindi salvare il file:Open the App.config file and add the following XML as the first child element under the <system.serviceModel> element, then save the file:

    <behaviors>  
       <endpointBehaviors>  
         <behavior>  
           <clientCredentials>  
             <serviceCertificate>  
               <authentication certificateValidationMode="None"/>  
             </serviceCertificate>  
           </clientCredentials>  
         </behavior>  
       </endpointBehaviors>  
     </behaviors>  
    

    In questo modo viene disabilitata la convalida del certificato.This disables certificate validation.

  7. Fare clic con il pulsante destro del mouse sulla soluzione TestService e fare clic su Imposta progetti di avvio.Right-click the TestService solution and click on Set StartUp Projects. Verrà aperta la pagina delle proprietà Progetto di avvio.The Startup Project property page opens. Nella pagina delle proprietà Progetto di avvio selezionare Progetti di avvio multipli e quindi fare clic sul campo Azione per ciascun progetto e scegliere Avvio dal menu a discesa.In the Startup Project property page, select Multiple startup projects then click in the Action field for each project and select Start from the drop-down menu. Fare clic su OK per salvare le impostazioni.Click OK to save the settings.

  8. Compilare la soluzione.Build the solution.

Passaggio 3: eseguire i test sulla soluzioneStep 3 – Test Your Solution

In questo passaggio verrà eseguito il test dell'applicazione WCF abilitata per WIF e verrà verificata la visualizzazione delle attestazioni.In this step you will test your WIF-enabled WCF application and verify that claims are presented.

Per eseguire il test sulle attestazioni dell'applicazione WCF abilitata per WIFTo test your WIF-enabled WCF application for claims

  1. Premere F5 per compilare ed eseguire l'applicazione.Press F5 to build and run the application. Verranno visualizzati una finestra della console e il testo seguente: Premere INVIO per richiamare il servizio e qualsiasi altro tasto per chiudere l'applicazione:You should be presented with a console window, and the following text: Press Enter key to invoke service, any other key to quit application:

  2. Premere INVIO. Verranno visualizzate le seguenti informazioni sulle attestazioni nella console:Press Enter, and the following claims information should appear in the console:

    Computed by Service1  
    Input received from client: Hello World  
    Client Name: Terry  
    IsAuthenticated: True  
    The service received the following issued claims of the client:  
    ClaimType :http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name    ClaimValue:Terry  
    ClaimType :http://schema.xmlsoap.org/ws/2005/05/identity/claims/surname    ClaimValue:Adams  
    ClaimType :http://schemas.microsoft.com/ws/2008/06/identity/claims/role    ClaimValue:developer  
    ClaimType :http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress    ClaimValue:terry@contoso.com  
    

    Importante

    Sia TestService che LocalSTS devono essere in esecuzione prima di premere INVIO.Both TestService and LocalSTS must be running before you press Enter. Verrà visualizzata una pagina Web per il servizio nella quale è possibile verificare che LocalSTS sia in esecuzione esaminando l'area di notifica (barra delle applicazioni).A Web page should open for the service and you can verify that LocalSTS is running by looking in the notification area (system tray).

  3. La visualizzazione delle attestazioni nella console è la prova dell'avvenuta autenticazione con il servizio STS per la visualizzazione delle attestazioni dal servizio WCF.If these claims appear in the console, you have successfully authenticated with the STS to display claims from the WCF service.