Condividi tramite


Procedura: Usare il servizio di gestione ACS per configurare Facebook come provider di identità Internet

Aggiornamento: 19 giugno 2015

Si applica a: Azure

Si applica a

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

  • Facebook

Riepilogo

Questo argomento descrive i passaggi di base necessari per l'aggiunta di Facebook come provider di identità. Facebook può essere aggiunto come provider di identità a ACS usando il portale di gestione oppure può essere automatizzato con il servizio di gestione ACS. L'uso del servizio di gestione è utile, ad esempio, negli scenari in cui si crea un'interfaccia utente personalizzata per la gestione di ACS o quando si automatizza l'onboarding di un nuovo tenant per soluzioni SaaS (Software as a Service) multi-tenant.

Contenuto

  • 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

Obiettivi

  • Identificare le informazioni di configurazione e i prerequisiti richiesti.

  • Elencare i passaggi necessari per aggiungere Facebook come provider di identità.

  • Eseguire il test per verificare la correttezza della configurazione.

Panoramica

Il servizio di gestione è un servizio Web che è uno dei componenti chiave di ACS. espone le funzionalità disponibili attraverso l'interfaccia utente del portale di gestione. Qualsiasi operazione eseguibile nel portale di gestione può essere effettuata anche tramite il servizio di gestione. L'aggiunta di Facebook come provider di identità a ACS consente di risparmiare sullo sviluppo e sulla gestione del meccanismo di gestione delle identità su larga scala internet. Per eseguire l'operazione di configurazione di Facebook come provider di identità, è necessario scrivere codice in base a passaggi specifici. Questo argomento descrive i passaggi di base.

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

Passaggio 1: Raccogliere le informazioni di configurazione

Questo passaggio consente di identificare e raccogliere le informazioni di configurazione richieste. È necessario raccogliere le seguenti informazioni:

  • Nome utente dell'identità del servizio di gestione - ManagementClient.

  • Password dell'identità del servizio di gestione - Per ottenere la password dell'identità per il servizio di gestione, effettuare le seguenti operazioni:

    1. Accedere al portale di gestione del Servizio di controllo di accesso.

    2. Nella sezione Administration fare clic sul collegamento Management Service.

    3. Nella pagina Management Service fare clic sul collegamento ManagementClient (ManagementClient è il nome utente effettivo del servizio).

    4. Nella sezione Credentials fare clic sul collegamento Symmetric Key o Password. Ciascun collegamento contiene lo stesso valore, corrispondente alla password.

  • Spazio dei nomi del servizio

  • Nome host ACS: in genere accesscontrol.windows.net.

  • ID applicazione Facebook e Segreto applicazione: seguire le istruzioni in Procedura: Configurare Facebook come provider di identità.

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

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

  2. Nella classe Program assegnare le informazioni raccolte in precedenza alle variabili dell'ambito del modulo usando codice simile al seguente.

static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

Passaggio 2: Aggiungere riferimenti ai servizi e agli assembly richiesti

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

Per 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:// YOURNAMESPACE.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;
    using System.Globalization;
    using System.Runtime.Serialization.Json;
    using ConsoleApplication1.ServiceReference1;
    

Se durante la creazione dell'applicazione console o l'aggiunta del riferimento al servizio di gestione si sono modificati alcuni valori predefiniti, l'ultima dichiarazione ConsoleApplication1.ServiceReference1 può variare.

Passaggio 3: Implementare il proxy del servizio di gestione

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

Per implementare il proxy 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. 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, "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 4: Aggiungere un provider di identità

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

Per aggiungere Facebook come provider di identità

  1. Nel metodo Main 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 + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Creare un provider di identità.

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

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  5. 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 = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Passaggio 5: Verificare il lavoro eseguito

Per eseguire il test della configurazione creata

  1. Accedere al portale di gestione del Servizio di controllo di accesso.

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

  3. Fare clic su una qualsiasi regola disponibile.

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

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

  6. Lasciare invariati i rimanenti valori predefiniti.

  7. Fare clic su Salva.

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