Dela via


Anvisningar: Använda ACS-hanteringstjänsten för att konfigurera program för förlitande part

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-förlitande part-program med hjälp av antingen ACS-hanteringsportalen (mer information finns i Program för förlitande part) 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 förlitande part-program 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 förlitande part-program 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 ett förlitande part-program

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 namnet på 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 namnområdesnamnet till exempel contoso.

  5. Hämta 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-regelgrupper och regler.

Så här skapar du ett exempelkonsolprogram

  1. Öppna Visual Studio 2012och skapa ett nytt konsolprogramprojekt under den Windows installerade mallen.

  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 föregående steg.

    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:

    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;
    
    

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 metoden GetTokenWithWritePermission och dess hjälpmetoder i klassen Program . 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 ett förlitande part-program

I det här steget skapar du ett exempel på ett förlitande part-program med ett SAML 2.0-tokenformat (standardalternativ), ingen tokenkrypteringsprincip (standardalternativ), associerad med en Windows Live ID-identitetsprovider (Microsoft-konto) (standardalternativ), 600 sekunders tokenlivstid (standardalternativ) och antingen ett anpassat X.509-tokensigneringscertifikat för ditt förlitande part-program eller ett tokensigneringscertifikat för tokensigneringscertifikatet för Access Control namnrymd.

Så här lägger du till ett förlitande part-program med ett signeringscertifikat för Access Control namnområdestoken

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Lägg till ditt nya förlitande part-program (du kan kalla det "MyRelyingPartyApplication", som du ser i koden nedan) och spara ändringarna genom att lägga till följande kod i Main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . PFX-fil" i koden nedan med den giltiga fullständiga sökvägen till X.509-certifikatet. Om till exempel ett certifikat med namnet ACS2ClientCertificate.cer sparas under C:, är rätt värde "C:\ ACS2ClientCertificate.cer".

    Ersätt "MyCertificatePassword" i koden nedan med rätt lösenord för ditt X.509-certifikat.

                //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);
    

Lägga till ett förlitande part-program med ett dedikerat tokensigneringscertifikat

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Skapa en hjälpfunktion ReadBytesFromPfxFile för att läsa byte från X.509-certifikatet genom att lägga till följande kod i klassen 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. Lägg till ditt nya förlitande part-program (du kan kalla det "MyRelyingPartyApplication", som du ser i koden nedan) och spara ändringarna genom att lägga till följande kod i Main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . PFX-fil" i koden nedan med den giltiga fullständiga sökvägen till X.509-certifikatet. Om till exempel ett certifikat med namnet ACS2ClientCertificate.cer sparas under C:, är rätt värde "C:\ ACS2ClientCertificate.cer".

    Ersätt "MyCertificatePassword" i koden nedan med rätt lösenord för ditt X.509-certifikat.

                //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);
    

Se även

Begrepp

Instruktioner för ACS