Dela via


Anvisningar: Använda ACS-hanteringstjänsten för att konfigurera en OpenID-identitetsprovider

Uppdaterad: 19 juni 2015

Gäller för: Azure

Gäller för

  • Microsoft® Azure™ Access Control Service (ACS)

  • OpenID 2.0

Sammanfattning

I det här avsnittet beskrivs de grundläggande steg som krävs för att lägga till identitetsprovidrar som stöder OpenID-protokollet. OpenID-identitetsprovidrar kan läggas till i ACS med hjälp av hanteringstjänsten. Det går inte att lägga till OpenID-identitetsprovidrar med hjälp av ACS-hanteringsportalen. I det här avsnittet refererar vi till OpenID 2.0-specifikationen eftersom det är den specifikationsversion som ACS stöder.

Innehåll

  • Mål

  • Översikt

  • Sammanfattning av steg

  • Steg 1 – Samla in konfigurationsinformation

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

  • Steg 3 – Implementera hanteringstjänstklienten

  • Steg 4 – Lägga till en identitetsprovider

Mål

  • Identifiera nödvändiga krav och konfigurationsinformation.

  • Ange de steg som krävs för att lägga till en OpenID-identitetsprovider.

Översikt

Hanteringstjänsten är en webbtjänst som är en av de viktigaste komponenterna i ACS. Hanteringstjänsten exponerar funktioner som är tillgängliga via användargränssnittet i hanteringsportalen. Allt som kan göras i hanteringsportalen kan också göras med hjälp av hanteringstjänsten. Genom att lägga till OpenID-identitetsprovidrar kan du spara på att utveckla och underhålla identitetshanteringsmekanismen i Internetskala. För att utföra uppgiften att lägga till en OpenID-identitetsprovider skriver du kod som följer specifika steg. Det här avsnittet beskriver de här grundläggande stegen.

Sammanfattning av steg

  • Steg 1 – Samla in konfigurationsinformation

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

  • Steg 3 – Implementera hanteringstjänstklienten

  • Steg 4 – Lägga till en identitetsprovider

Steg 1 – Samla in konfigurationsinformation

Det här steget identifierar och visar hur du samlar in nödvändig konfigurationsinformation. Du måste samla in följande information:

  • Användarnamn för hanteringstjänstidentitetManagementClient.

  • Lösenord för hanteringstjänstidentitet – Så här hämtar du lösenordet för tjänstidentiteten för hanteringstjänsten:

    1. Logga in på Access Control Service Management Portal.

    2. I avsnittet Administration klickar du på länken Hanteringstjänst .

    3. På sidan Hanteringstjänst klickar du på länken ManagementClient (ManagementClient är det faktiska användarnamnet för tjänsten).

    4. I avsnittet Autentiseringsuppgifter klickar du på länken Symmetrisk nyckel eller Lösenord . Värdet i varje är detsamma. Det här är lösenordet.

  • Tjänstens namnområde

  • ACS-värdnamn – vanligtvis accesscontrol.windows.net.

När du har samlat in nödvändig information följer du dessa steg för att skapa ett exempelkonsolprogram som kör koden för att lägga till OpenID-identitetsprovider:

  1. Öppna Visual Studio ® 2010 och skapa ett nytt konsolprogramprojekt.

  2. I klassen Program tilldelar du informationen som samlats in tidigare till modulomfångsvariablerna med hjälp av kod som liknar följande.

        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;

Steg 2 – Lägga till referenser till nödvändiga tjänster och sammansättningar

Det här steget identifierar och lägger till de nödvändiga beroendena till tjänsterna och sammansättningarna.

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

  1. Lägg till en referens till System.Web.Extensions.

  2. 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.

    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;
    

Observera den senaste deklarationen , ConsoleApplication1.ServiceReference1. Det kan variera i ditt fall om du ändrade standardvärden när du skapade konsolprogrammet eller när du lade till referensen till hanteringstjänsten.

Steg 3 – Implementera hanteringstjänstklienten

Det här steget skapar en metod som kapslar in implementeringen av hanteringstjänstklienten.

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. Implementera metoden GetTokenWithWritePermission och dess hjälpmetoder. Swt OAuth-token läggs till 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 4 – Lägga till en identitetsprovider

Det här steget lägger till en OpenID-identitetsprovider med hjälp av hanteringstjänstklienten som du skapade tidigare.

Lägga till en OpenID-identitetsprovider

  1. Initiera hanteringstjänstens klient i Main-metoden .

    ManagementService svc = CreateManagementServiceClient();
    
  2. Lägg till din identitetsprovider som utfärdare.

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Skapa en identitetsprovider.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
  4. Uppdatera inloggningsadressen för identitetsprovidern. I den här övningen använder du www.myopenid.com som inloggningsadress. Andra OpenID-identitetsprovidrar är Google och Yahoo! och de har egna inloggningsadresser. De är https://www.google.com/accounts/o8/ud respektive 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. Gör identitetsprovidern tillgänglig för förlitande parter, förutom hanteringstjänsten.

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