Condividi tramite


Procedura: Usare il servizio di gestione ACS per la configurazione delle identità del servizio

Aggiornamento: 19 giugno 2015

Si applica a: Azure

Si applica a

  • Microsoft Azure Active Directory Access Control (anche noto come Servizio di controllo di accesso o ACS)

Panoramica

È possibile configurare le identità del servizio ACS usando il portale di gestione ACS (per altre informazioni, vedere Identità del servizio) o il servizio di gestione ACS. L'uso del servizio di gestione ACS può essere più efficiente se si crea un'interfaccia utente personalizzata per la gestione di ACS o se si vuole automatizzare l'onboarding di un nuovo tenant per soluzioni SaaS (Software as a Service) multi-tenant.

Procedura per la configurazione di identità del servizio mediante il servizio di gestione ACS

Importante

Prima di eseguire i passaggi seguenti, assicurarsi che il sistema soddisfi tutti i requisiti di .NET Framework e della piattaforma riepilogati in Prerequisiti ACS.

Per configurare le identità del servizio tramite il servizio di gestione ACS, seguire questa procedura:

  • Passaggio 1 - Raccogliere le informazioni di configurazione di ACS

  • Passaggio 2 - Creare un'applicazione console di esempio

  • Passaggio 3: Aggiungere riferimenti ai servizi e agli assembly necessari

  • Passaggio 4: Implementare il client del servizio di gestione

  • Passaggio 5 - Aggiungere un'identità del servizio

Passaggio 1 - Raccogliere le informazioni di configurazione di ACS

È possibile usare il portale di gestione ACS per raccogliere le informazioni di configurazione necessarie. Per altre informazioni su come avviare il portale di gestione ACS, vedere Portale di gestione ACS.

Per raccogliere le informazioni di configurazione di ACS

  1. Avviare il portale di gestione ACS. Per altre informazioni su come avviare il portale di gestione ACS, vedere Portale di gestione ACS.

  2. Ottenere il valore dell'account del servizio di gestione ACS. È possibile usare l'account predefinito ManagementClient. Per visualizzare questo valore, nel portale di gestione ACS fare clic su Servizio di gestione nella sezione Amministrazione dell'albero sul lato sinistro della pagina.

  3. Ottenere il valore della password dell'account del servizio di gestione ACS. Per visualizzare questo valore, attenersi alla seguente procedura:

    1. Nel portale di gestione ACS fare clic su Servizio di gestione nella sezione Amministrazione dell'albero sul lato sinistro della pagina.

    2. Nella pagina Management Service fare clic su ManagementClient in Management Service Accounts.

    3. Nella pagina Edit Management Service Account in Credentials fare clic su Password.

    4. Nella pagina Edit Management Credential copiare il valore nel campo Password.

  4. Ottenere il valore dello spazio dei nomi di Azure. È possibile ottenere questo valore dal portale di Azure o dall'URL del portale di gestione ACS. Ad esempio, in http://contoso.accesscontrol.windows.netil valore dello spazio dei nomi di Azure è contoso.

  5. Ottenere il valore del nome host ACS. In genere, questo valore è accesscontrol.windows.net.

Passaggio 2 - Creare un'applicazione console di esempio

In questo passaggio viene creata un'applicazione console di esempio in grado di eseguire il codice per aggiungere le identità del servizio ACS.

Per creare un'applicazione console di esempio

  1. Aprire Visual Studio 2012 e creare un nuovo progetto di applicazione console.

  2. Aggiungere il seguente codice alla classe Program e quindi assegnare le variabili serviceIdentityPasswordForManagement, serviceNamespace e acsHostName alle informazioni di configurazione appropriate raccolte nel passaggio precedente.

    public const string serviceIdentityUsernameForManagement = "ManagementClient";
    public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient";
    public const string serviceNamespace = "MyNameSpaceNoDots";
    public const string acsHostName = "accesscontrol.windows.net";
    public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
    static string cachedSwtToken;
    

Passaggio 3: Aggiungere riferimenti ai servizi e agli assembly necessari

In questo passaggio vengono identificate e aggiunte le dipendenze richieste ai servizi e agli assembly.

Per aggiungere le dipendenze richieste ai servizi e agli assembly

  1. Fare clic con il pulsante destro del mouse su Riferimenti, scegliere Aggiungi riferimento e aggiungere un riferimento a System.Web.Extensions.

    Nota

    Può essere necessario fare clic con il pulsante destro del mouse sul nome dell'applicazione console di esempio in Esplora soluzioni, scegliere Proprietà e modificare il framework di destinazione dell'applicazione di esempio da .NET Framework 4 Client Profile (assegnato per impostazione predefinita quando si crea una nuova applicazione console) in .NET Framework 4.

  2. Fare clic con il pulsante destro del mouse su Riferimento al servizio, scegliere Aggiungi riferimento al servizio e aggiungere un riferimento al servizio di gestione. L'URL del servizio di gestione, univoco per lo spazio dei nomi, ha un aspetto simile al seguente:

    https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. Aggiungere le seguenti dichiarazioni, dove MyConsoleApplication è il nome dell'applicazione console e MyServiceReference è il nome del riferimento al servizio:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Net;
    using System.Data.Services.Client;
    using System.Collections.Specialized;
    using System.Web.Script.Serialization;
    using System.Globalization; 
    using System.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates;
    using MyConsoleApplication.MyServiceReference;
    

Passaggio 4: Implementare il client del servizio di gestione

In questo passaggio viene implementato il client del servizio di gestione.

Per implementare il client del servizio di gestione

  1. Aggiungere il metodo seguente alla classe Program :

       public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceEndpoint = String.Format(CultureInfo.InvariantCulture, "https://{0}.{1}/{2}",
                    serviceNamespace,
                    acsHostName,
                    acsManagementServicesRelativeUrl);
                ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
  2. Aggiungere il seguente codice alla classe Program per creare il metodo GetTokenWithWritePermission e i relativi metodi di supporto. GetTokenWithWritePermission e i relativi metodi di supporto aggiungono il token SWT OAuth all'intestazione Authorization della richiesta HTTP.

    public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + cachedSwtToken);
            }
    
            private static string GetTokenFromACS()
            {
                //
                // Request a token from ACS
                //
                WebClient client = new WebClient();
                client.BaseAddress = string.Format(CultureInfo.CurrentCulture, 
                                                   "https://{0}.{1}", 
                                                   serviceNamespace, 
                                                   acsHostName);
    
                NameValueCollection values = new NameValueCollection();
                values.Add("grant_type", "client_credentials");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("scope", client.BaseAddress + acsManagementServicesRelativeUrl);
    
                byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    

Passaggio 5 - Aggiungere un'identità del servizio

In questo passaggio viene aggiunta un'identità del servizio usando il client del servizio di gestione creato nel passaggio precedente. L'identità del servizio ACS può usare una password, una chiave simmetrica o un certificato X.509 come tipo di credenziale.

Per aggiungere un'identità del servizio

  1. Inizializzare il client del servizio di gestione aggiungendo il seguente codice al metodo Main della classe Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Eseguire una delle operazioni seguenti:

    • Per aggiungere un'identità del servizio associata a una password e salvare le modifiche, aggiungere il seguente codice al metodo Main della classe Program:

      Nota

      È possibile assegnare a questa identità del servizio il nome "SampleServiceIdentity" e impostare la relativa password su "SampleServiceIdentityPassword" come mostrato nel seguente codice.

                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Per aggiungere un'identità del servizio associata a una chiave simmetrica e salvare le modifiche, aggiungere il seguente codice al metodo Main della classe Program:

      Nota

      È possibile assegnare a questa identità del servizio il nome "SampleServiceIdentity" e impostare la relativa chiave simmetrica su "SampleServiceIdentityPassword" come mostrato nel seguente codice.

                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Per aggiungere un'identità del servizio associata a un certificato X.509 e salvare le modifiche, aggiungere il seguente codice al metodo Main della classe Program:

      Nota

      È possibile assegnare a questa identità del servizio il nome "SampleServiceIdentity" come mostrato nel seguente codice.

      Sostituire "Full path to your .CER file" nel seguente codice con il percorso completo valido del certificato X.509. Nel caso ad esempio di un certificato denominato ACS2ClientCertificate.cer salvato in C:\, il valore corretto sarà "C:\ ACS2ClientCertificate.cer".

                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      

Vedere anche

Concetti

Procedure di ACS