Dela via


Anvisningar: Använda ACS-hanteringstjänsten för att konfigurera tjänstidentiteter

Uppdaterad: 19 juni 2015

Gäller för: Azure

Gäller för

  • Microsoft Azure Active Directory Access Control (kallas även Access Control Service eller ACS)

Översikt

Du kan konfigurera ACS-tjänstidentiteter med acs-hanteringsportalen (mer information finns i Tjänstidentiteter) eller ACS-hanteringstjänsten. Att arbeta med ACS-hanteringstjänsten kan vara mer effektivt om du skapar ett anpassat användargränssnitt för att hantera ACS eller om du vill automatisera registrering av en ny klientorganisation för SaaS-lösningar (Programvara som en tjänst för flera innehavare).

Steg för att konfigurera tjänstidentiteter med hjälp av ACS-hanteringstjänsten

Viktigt

Innan du utför följande steg kontrollerar du att systemet uppfyller alla krav för .NET-ramverket och plattformen som sammanfattas i ACS-krav.

Utför följande steg för att konfigurera tjänstidentiteter med acs-hanteringstjänsten:

  • Steg 1 – Samla in information om ACS-konfiguration

  • Steg 2 – Skapa ett exempelkonsolprogram

  • Steg 3 – Lägg till referenser till nödvändiga tjänster och sammansättningar

  • Steg 4 – Implementera hanteringstjänstklienten

  • Steg 5 – Lägga till en tjänstidentitet

Steg 1 – Samla in information om ACS-konfiguration

Du kan använda ACS-hanteringsportalen för att samla in nödvändig konfigurationsinformation. Mer information om hur du startar ACS-hanteringsportalen finns i ACS-hanteringsportalen.

Samla in acs-konfigurationsinformation

  1. Starta ACS-hanteringsportalen. Mer information om hur du startar ACS-hanteringsportalen finns i ACS-hanteringsportalen.

  2. Hämta värdet för ACS-hanteringstjänstkontot. Du kan använda standardkontot ManagementClient . Om du vill visa det här värdet går du till ACS-hanteringsportalen och klickar på Hanteringstjänst under avsnittet Administration i trädet till vänster på sidan.

  3. Hämta värdet för lösenordet för ACS-hanteringstjänstens konto. Om du vill visa det här värdet gör du följande:

    1. I ACS-hanteringsportalen klickar du på Hanteringstjänst under avsnittet Administration i trädet till vänster på sidan.

    2. På sidan Hanteringstjänst klickar du på HanteringKlient under Hanteringstjänstkonton.

    3. På sidan Redigera hanteringstjänstkonto går du till Autentiseringsuppgifter och klickar på Lösenord.

    4. På sidan Redigera hanteringsautentiseringsuppgift kopierar du värdet i fältet Lösenord .

  4. Hämta värdet för ditt Azure-namnområde. Du kan hämta det här värdet från Azure Portal eller från URL:en för ACS-hanteringsportalen. I http://contoso.accesscontrol.windows.netär till exempel värdet för Azure-namnområdet contoso.

  5. Hämta värdet för ACS-värdnamnet. Vanligtvis är det accesscontrol.windows.net.

Steg 2 – Skapa ett exempelkonsolprogram

I det här steget skapar du ett exempelkonsolprogram som kan köra koden för att lägga till dina ACS-tjänstidentiteter.

Så här skapar du ett exempelkonsolprogram

  1. Öppna Visual Studio 2012 och skapa ett nytt konsolprogramprojekt.

  2. Lägg till följande kod i klassen Program och tilldela sedan variablerna serviceIdentityPasswordForManagement, serviceNamespace och acsHostName till lämplig konfigurationsinformation som du samlade in i steget ovan.

    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;
    

Steg 3 – Lägg till referenser till nödvändiga tjänster och sammansättningar

I det här steget identifierar och lägger du till nödvändiga beroenden i tjänsterna och sammansättningarna.

Så här lägger du till nödvändiga beroenden i tjänsterna och sammansättningarna

  1. Högerklicka på Referenser, klicka på Lägg till referens och lägg till en referens till System.Web.Extensions.

    Anteckning

    Du kan behöva högerklicka på exempelkonsolens programnamn i Solution Explorer, välja Egenskaper och ändra målramverket för exempelprogrammet från .NET Framework 4-klientprofilen (tilldelad som standard när du skapar ett nytt konsolprogram) till .NET Framework 4.

  2. Högerklicka på Tjänstreferenser, klicka på Lägg till tjänstreferens och lägg till en tjänstreferens till hanteringstjänsten. Url:en för hanteringstjänsten är unik för ditt namnområde och ser ut ungefär så här:

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

  3. Lägg till följande deklarationer, där MyConsoleApplication är namnet på konsolprogrammet och MyServiceReference är namnet på tjänstreferensen:

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

Steg 4 – Implementera hanteringstjänstklienten

I det här steget implementerar du hanteringstjänstens klient.

Så här implementerar du hanteringstjänstens klient

  1. Lägg till följande metod i klassen 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. Lägg till följande kod i klassen Program för att skapa metoden GetTokenWithWritePermission och dess hjälpmetoder. GetTokenWithWritePermission och dess hjälpkomponenter lägger till SWT OAuth-token i auktoriseringshuvudet för HTTP-begäran.

    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;
    
            }
    

Steg 5 – Lägga till en tjänstidentitet

I det här steget lägger du till en tjänstidentitet med hjälp av den hanteringstjänstklient som du skapade i steget ovan. ACS-tjänstidentiteten kan använda ett lösenord, en symmetrisk nyckel eller ett X.509-certifikat som typ av autentiseringsuppgifter.

Lägga till en tjänstidentitet

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Gör något av följande:

    • Om du vill lägga till en tjänstidentitet som är associerad med ett lösenord och spara ändringar lägger du till följande kod i Main-metoden i klassen Program :

      Anteckning

      Du kan anropa den här tjänstidentiteten "SampleServiceIdentity" och ange lösenordet till "SampleServiceIdentityPassword" enligt koden nedan.

                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Om du vill lägga till en tjänstidentitet som är associerad med en symmetrisk nyckel och spara ändringar lägger du till följande kod i Main-metoden i klassen Program :

      Anteckning

      Du kan anropa tjänstidentiteten "SampleServiceIdentity" och ange dess symmetriska nyckelvärde till "SampleServiceIdentityPassword" enligt koden nedan.

                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Om du vill lägga till en tjänstidentitet som är associerad med ett X.509-certifikat och spara ändringar lägger du till följande kod i Main-metoden i klassen Program :

      Anteckning

      Du kan anropa den här tjänstidentiteten "SampleServiceIdentity" enligt koden nedan

      I koden nedan ersätter du "Fullständig sökväg till din . CER-fil" med den fullständigt kvalificerade sökvägen till X.509-certifikatet. Om till exempel ett certifikat med namnet ACS2ClientCertificate.cer sparas i C:\, är rätt värde "C:\ ACS2ClientCertificate.cer".

                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      

Se även

Begrepp

Instruktioner för ACS