Procedura: Usare il servizio di gestione ACS per configurare AD FS 2.0 come provider di identità Enterprise
Aggiornamento: 19 giugno 2015
Si applica a: Azure
Si applica a
Servizio di controllo di accesso di Microsoft® Azure™ (ACS)
Microsoft Active Directory® Federation Services (ADFS) 2.0
Riepilogo
Questo argomento illustra come aggiungere il provider di identità a uno spazio dei nomi o a un'applicazione relying party. Per eseguire questa attività, è possibile il servizio di gestione ACS. Il servizio di gestione è particolarmente utile quando si crea un'interfaccia utente personalizzata per la gestione di ACS e quando si automatizza l'aggiunta di nuovi 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.
Elencare i passaggi obbligatori.
Verificare la correttezza della configurazione.
Panoramica
Il servizio di gestione ACS è un servizio Web che espone le funzionalità ACS al codice. Il servizio di gestione ACS può accedere a tutte le funzionalità ACS, incluso il subset di funzionalità disponibile nell'interfaccia utente del portale di gestione ACS.
L'aggiunta di Microsoft come provider di identità al servizio contenitore di Azure consente di riutilizzare gli investimenti effettuati nella gestione delle identità aziendali per soluzioni basate sul cloud. Per configurare come provider di identità, è necessario scrivere codice che segue 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 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 ACS: accesscontrol.windows.net
Stringa di certificato di firma: ottenere la stringa del certificato di firma di AD FS dalla distribuzione.
Per individuare la password e il nome utente dell'identità del servizio di gestione, seguire questa procedura.
Passare al portale di gestione Microsoft Azure (https://manage.WindowsAzure.com), accedere e 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 Controllo di accesso, selezionare lo spazio dei nomi e 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.
Fare clic su Management Service, quindi selezionare un servizio di gestione, ad esempio ManagementClient.
Il valore del campo Nome è il nome utente dell'identità del servizio di gestione.
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 necessarie, seguire questa procedura per creare un'applicazione console di esempio che eseguirà il codice da aggiungere come provider di identità:
Avviare Visual Studio e creare un nuovo progetto di applicazione console.
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";
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
Aggiungere un riferimento a System.Web.Extensions.
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
Aggiungere le seguenti dichiarazioni.
using System.Web; using System.Net; using System.Data.Services.Client; using System.Collections.Specialized; using System.Web.Script.Serialization;
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
Aggiungere il metodo seguente 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; }
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; }
Passaggio 4: Aggiungere un provider di identità
Questo passaggio aggiunge come provider di identità usando il proxy del servizio di gestione creato in precedenza.
Per aggiungere ADFS 2.0 come provider di identità
Inizializzare il proxy del servizio di gestione.
ManagementService svc = CreateManagementServiceClient();
Aggiungere il provider di identità come autorità emittente.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Creare un provider di identità.
IdentityProvider identityProvider = new IdentityProvider() { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "WsFederation", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", identityProvider);
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);
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);
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);
Passaggio 5: Verificare il lavoro eseguito
Per eseguire il test della configurazione creata
Nella pagina Access Control Service fare clic sul collegamento Rule Groups nella sezione Trust Relationships.
Fare clic su una qualsiasi regola disponibile.
Nella pagina Edit Rule Group fare clic sul collegamento Add Rule.
Nella pagina Add Claim Rule scegliere il provider di identità aggiunto dall'elenco a discesa disponibile nella sezione Claim Issuer.
Lasciare invariati i rimanenti valori predefiniti.
Fare clic su Salva.
È stata creata una regola pass-through per il provider di identità.