Questa documentazione è stata archiviata e non viene gestita.

Procedura: Usare il servizio di gestione ACS per configurare ADFS 2.0 come provider di identità enterprise

Pubblicato: aprile 2011

Aggiornamento: giugno 2015

Si applica a: Azure

  • Servizio di controllo di accesso di Microsoft® Azure™ (ACS)

  • Microsoft Active Directory® Federation Services (ADFS) 2.0

Questo argomento illustra come aggiungere il provider di identità di a uno spazio dei nomi o a un'applicazione relying party. Per eseguire questa attività, è possibile usare il servizio di gestione ACS. Il servizio di gestione risulta particolarmente utile quando si crea un'interfaccia utente personalizzata per la gestione di ACS e quando si automatizza la procedura di aggiunta di nuovi tenant per soluzioni SaaS (Software as a Service) multi-tenant.

  • Obiettivi

  • Panoramica

  • Riepilogo dei passaggi

  • Passaggio 1: Raccogliere le informazioni di configurazione

  • Passaggio 2: Aggiungere riferimenti ai servizi e agli assembly richiesti

  • Passaggio 3: Implementare il proxy del servizio di gestione

  • Passaggio 4: Aggiungere un provider di identità

  • Passaggio 5: Verificare il lavoro eseguito

  • Identificare le informazioni di configurazione e i prerequisiti.

  • Elencare i passaggi obbligatori.

  • Verificare la correttezza della configurazione.

Il servizio di gestione ACS è un servizio Web che espone le funzionalità di ACS al codice. Il servizio di gestione ACS accede a tutte le funzionalità di ACS, incluso il subset disponibile nell'interfaccia utente del portale di gestione ACS.

Aggiungendo Microsoft come provider di identità in ACS è possibile riutilizzare l'investimento effettuato nella gestione dell'identità aziendale per le soluzioni basate sul cloud. Per configurare come provider di identità, è necessario scrivere codice in base a passaggi specifici. Questo argomento descrive i passaggi di base.

  • Passaggio 1: Raccogliere le informazioni di configurazione

  • Passaggio 2: Aggiungere riferimenti ai servizi e agli assembly richiesti

  • Passaggio 3: Implementare il proxy del servizio di gestione

  • Passaggio 4: Aggiungere un provider di identità

  • Passaggio 5: Verificare il lavoro eseguito

Questo passaggio spiega come raccogliere le informazioni di configurazione richieste. È necessario raccogliere le seguenti informazioni:

  • Nome utente dell'identità del servizio di gestione. Il valore predefinito è ManagementClient.

  • Password dell'identità del servizio di gestione.

  • Nome spazio dei nomi.

  • Nome host di ACS: accesscontrol.windows.net

  • Stringa del certificato di firma: è possibile ottenere la stringa del certificato di firma di ADFS dalla distribuzione di in uso.

Per individuare la password e il nome utente dell'identità del servizio di gestione, seguire questa procedura.

  1. Passare al portale di gestione di Microsoft Azure (https://manage.WindowsAzure.com), eseguire l'accesso, quindi fare clic su Active Directory. (Suggerimento per la risoluzione dei problemi: elemento "Active Directory" mancante o non disponibile) Per gestire uno spazio dei nomi di Controllo di accesso, selezionare lo spazio dei nomi, quindi fare clic su Gestisci. Altrimenti, fare clic su Spazi dei nomi controllo di accesso, selezionare lo spazio dei nomi, quindi fare clic su Gestisci.

  2. Fare clic su Management Service, quindi selezionare un servizio di gestione, ad esempio ManagementClient.

  3. Il valore del campo Name corrisponde al Management Service identity username.

  4. Nella sezione Credentials fare clic su Password. Il valore del campo della password corrisponde alla password dell'identità del servizio di gestione.

Dopo aver raccolto le informazioni richieste, seguire questa procedura per creare un'applicazione console di esempio in cui verrà eseguito il codice per aggiungere come provider di identità.

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

  2. Nella classe Program assegnare i valori delle informazioni di configurazione alle variabili dell'ambito del modulo. Il seguente codice illustra come effettuare questa operazione.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    
    
    

Questo passaggio consente di identificare e aggiungere le dipendenze richieste ai servizi e agli assembly.

  1. Aggiungere un riferimento a System.Web.Extensions.

  2. 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://SPAZIODEINOMI.accesscontrol.windows.net/v2/mgmt/service

  3. Aggiungere le seguenti dichiarazioni.

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    
    

Questo passaggio consente di creare un metodo che incapsula l'implementazione del proxy del servizio di gestione.

  1. Aggiungere il seguente metodo alla classe Program.

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                ManagementService managementService = 
    new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
  2. Implementare il metodo GetTokenWithWritePermission e i relativi metodi di supporto. Il token SWT OAuth verrà aggiunto 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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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;
    
            }
    
    

Questo passaggio consente di aggiungere come provider di identità usando il proxy del servizio di gestione creato in precedenza.

  1. Inizializzare il proxy del servizio di gestione.

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Aggiungere il provider di identità come autorità emittente.

    Issuer issuer = new Issuer
           {
           Name = identityProviderName
    };
           svc.AddToIssuers(issuer);
           svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  3. Creare un provider di identità.

    IdentityProvider identityProvider = new IdentityProvider()
    {
        DisplayName = identityProviderName,
        Description = identityProviderName,
        WebSSOProtocolType = "WsFederation",
        IssuerId = issuer.Id
    };
           svc.AddObject("IdentityProviders", identityProvider);
    
    
  4. Creare una chiave per la firma del provider di identità in base al certificato ottenuto in precedenza.

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
    
  5. Aggiornare l'indirizzo di accesso del provider di identità.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  6. Rendere disponibile il provider di identità per le relying party, escludendo il servizio di gestione.

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    

  1. Nella pagina Access Control Service fare clic sul collegamento Rule Groups nella sezione Trust Relationships.

  2. Fare clic su una qualsiasi regola disponibile.

  3. Nella pagina Edit Rule Group fare clic sul collegamento Add Rule.

  4. Nella pagina Add Claim Rule scegliere il provider di identità aggiunto dall'elenco a discesa disponibile nella sezione Claim Issuer.

  5. Lasciare invariati i rimanenti valori predefiniti.

  6. Fare clic su Save.

È stata creata una regola pass-through per il provider di identità.

Mostra: