Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona

Procedura: utilizzare il servizio di gestione ACS per la configurazione di applicazioni relying party

Pubblicato: aprile 2011

Aggiornamento: febbraio 2014

Si applica a: Azure

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

È possibile configurare applicazioni relying party ACS utilizzando il portale di gestione ACS (per ulteriori informazioni vedere Applicazioni relying party) oppure il servizio di gestione ACS. Quando si crea un'interfaccia utente personalizzata per la gestione di ACS oppure si desidera automatizzare il processo di on-boarding di un nuovo tenant per soluzioni SaaS (Software as a Service) multi-tenant, l'utilizzo del servizio di gestione ACS presenta vantaggi in termini di efficienza.

ImportantImportante
Prima di eseguire i passaggi riportati di seguito, verificare la conformità del sistema a tutti i requisiti di piattaforma e di .NET Framework riepilogati in Prerequisiti di ACS.

Per configurare applicazioni relying party mediante il servizio di gestione ACS, attenersi alla seguente procedura:

Per raccogliere le informazioni di configurazione necessarie, è possibile utilizzare il portale di gestione ACS. Per ulteriori informazioni sull'avvio del portale di gestione ACS, vedere Portale di gestione ACS.

  1. Avviare il portale di gestione ACS. Per ulteriori informazioni sull'avvio del portale di gestione ACS, vedere Portale di gestione ACS.

  2. Ottenere il valore dell'account del servizio di gestione ACS. È possibile utilizzare l'account predefinito ManagementClient. Per visualizzare questo valore, nel portale di gestione ACS fare clic su Management service nella sezione Administration nell'albero nella parte sinistra 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 Management service nella sezione Administration nell'albero nella parte sinistra 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 del proprio spazio dei nomi del servizio Windows Azure AppFabric. Questo valore può essere ottenuto dal portale Windows Azure AppFabric oppure dall'URL del portale di gestione ACS. Ad esempio, in http://contoso.accesscontrol.windows.net, il valore dello spazio dei nomi del servizio è contoso.

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

In questo passaggio verrà creata un'applicazione console di esempio in grado di eseguire il codice per l'aggiunta di gruppi di regole e regole ACS.

  1. Aprire Visual Studio 2012 e creare un nuovo progetto di applicazione console sotto il modello installato di Windows.

  2. Aggiungere il codice riportato di seguito 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;
    
    

In questo passaggio verranno identificate e aggiunte 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.

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

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

  3. Aggiungere le dichiarazioni riportate di seguito, dove MyConsoleApplication è il nome dell'applicazione console:

    using System;
    using System.IO;
    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;
                  
    

In questo passaggio verrà implementato il 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. Aggiungere il metodo GetTokenWithWritePermission e i relativi metodi di supporto alla classe Program. 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;
    
            }
    
    
    

In questo passaggio verrà creata un'applicazione relying party di esempio con un formato di token SAML 2.0 (opzione predefinita), nessun criterio di crittografia dei token (opzione predefinita), associata a un provider di identità Windows Live ID (opzione predefinita), 600 secondi di durata dei token (opzione predefinita) e un certificato di firma dei token X.509 dedicato oppure un certificato di firma dei token dello spazio dei nomi del servizio.

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

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Aggiungere la nuova applicazione relying party, alla quale è possibile assegnare il nome "MyRelyingPartyApplication" come mostrato nel codice riportato di seguito, e salvare le modifiche aggiungendo il codice riportato di seguito al metodo Main della classe Program:

    noteNota
    Sostituire "Full path to your .PFX file" nel codice riportato di seguito 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".

    Sostituire "MyCertificatePassword" nel codice riportato di seguito con la password corretta per il certificato X.509.

    
                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

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

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Creare una funzione helper ReadBytesFromPfxFile per la lettura dei byte del certificato X.509 aggiungendo il codice riportato di seguito alla classe Program:

    //Helper Function to Read Bytes from Your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
    
                return signingCertificate;
            }
    
    
  3. Aggiungere la nuova applicazione relying party, alla quale è possibile assegnare il nome "MyRelyingPartyApplication" come mostrato nel codice riportato di seguito, e salvare le modifiche aggiungendo il codice riportato di seguito al metodo Main della classe Program:

    noteNota
    Sostituire "Full path to your .PFX file" nel codice riportato di seguito 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".

    Sostituire "MyCertificatePassword" nel codice riportato di seguito con la password corretta per il certificato X.509.

    
                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
                //Create a Signing Certificate
    
                X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword");
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
    
                string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
    
                byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime(),
                    Type = "X509Certificate",
                    Usage = "Signing",
                    IsPrimary = true,
                    Value = signingCertificate,
                    Password = Encoding.UTF8.GetBytes("MyCertificatePassword")
                };
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Vedere anche

Concetti

Procedure di ACS

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft