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änstidentitet – ManagementClient.
Lösenord för hanteringstjänstidentitet – Så här hämtar du lösenordet för tjänstidentiteten för hanteringstjänsten:
Logga in på Access Control Service Management Portal.
I avsnittet Administration klickar du på länken Hanteringstjänst .
På sidan Hanteringstjänst klickar du på länken ManagementClient (ManagementClient är det faktiska användarnamnet för tjänsten).
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:
Öppna Visual Studio ® 2010 och skapa ett nytt konsolprogramprojekt.
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
Lägg till en referens till System.Web.Extensions.
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
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
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; }
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
Initiera hanteringstjänstens klient i Main-metoden .
ManagementService svc = CreateManagementServiceClient();
Lägg till din identitetsprovider som utfärdare.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Skapa en identitetsprovider.
var openId = new IdentityProvider { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "OpenId", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", openId);
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();
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);