Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona

Procedura: utilizzare il servizio di gestione per configurare OpenID come provider di identità

Pubblicato: aprile 2011

Aggiornamento: febbraio 2014

Si applica a: Azure

  • Access Control Service (ACS) di Microsoft® Windows Azure™ AppFabric

  • OpenID 2.0

In questo argomento vengono descritti i passaggi di base necessari per l'aggiunta dei provider di identità che supportano il protocollo OpenID. È possibile aggiungere i provider di identità OpenID a ACS mediante il servizio di gestione e non mediante il portale di gestione ACS. In questo argomento si fa riferimento a OpenID 2.0 perché è la versione della specifica supportata da ACS.

  • Obiettivi

  • Panoramica

  • Sintesi dei passaggi

  • Passaggio 1 - Raccogliere le informazioni di configurazione

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

  • Passaggio 3 - Implementare il client del servizio di gestione

  • Passaggio 4 - Aggiungere un provider di identità

  • Identificare le informazioni di configurazione e i prerequisiti richiesti.

  • Elencare i passaggi necessari per aggiungere un provider di identità OpenID.

Il servizio di gestione, un servizio Web che costituisce uno dei componenti principali 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 dei provider di identità OpenID a ACS consente di ridurre i tempi di sviluppo e di mantenere il meccanismo di gestione delle identità scalabile per Internet. Per eseguire l'operazione di aggiunta di un provider di identità OpenID, scrivere codice in base a passaggi specifici. In questo argomento vengono descritti 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 client del servizio di gestione

  • Passaggio 4 - Aggiungere un provider di identità

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 di Access Control Service (http://go.microsoft.com/fwlink/?LinkID=129428).

    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.

Dopo aver raccolto le informazioni richieste, eseguire la procedura riportata di seguito per creare un'applicazione console di esempio in cui verrà eseguito il codice per l'aggiunta del provider di identità OpenID:

  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 utilizzando codice simile a quello riportato di seguito.


        static string serviceIdentityUsernameForManagement = "ManagementClient";
        static string serviceIdentityPasswordForManagement = "...update to your password...";

        static string serviceNamespace = "...update to your namespace...";
        static string acsHostName = "accesscontrol.windows.net";
        static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";

        static string identityProviderName = "My Open ID Identity Provider";

        static string cachedSwtToken;


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 a quello riportato di seguito:

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

  3. Aggiungere le dichiarazioni riportate di seguito.

    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;
    
    

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

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

  1. Aggiungere il metodo riportato di seguito 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;
    
            }
    
    
    

Questo passaggio consente di aggiungere un provider di identità OpenID utilizzando il client del servizio di gestione creato in precedenza.

  1. Nel metodo Main inizializzare il client 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à.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. Aggiornare l'indirizzo di accesso del provider di identità. In questo esercizio, come indirizzo di accesso verrà utilizzato www.myopenid.com. Altri provider di identità OpenID sono Google e Yahoo! con i relativi indirizzi di accesso, rispettivamente https://www.google.com/accounts/o8/ud e https://open.login.yahooapis.com/openid/op/auth.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  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 = openId.Id,
                            RelyingPartyId = rp.Id
                        });
                    }
                }
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    
    

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft