2(共 2)对本文的评价是有帮助 - 评价此主题

如何:使用管理服务配置 OpenID 标识提供者

发布时间: 2011年4月

更新时间: 2011年5月

应用到: Windows Azure

适用于

  • Microsoft® Windows Azure™ AppFabric Access Control Service (ACS)

  • OpenID 2.0

摘要

本主题概述了添加支持 OpenID 协议的标识提供者所需的基本步骤。可以使用管理服务将 OpenID 标识提供者添加到 ACS,但无法使用 ACS 管理门户添加 OpenID 标识提供者。在本主题中,我们将涉及 OpenID 2.0 规范,因为这是 ACS 支持的规范版本。

内容

  • 目标

  • 概述

  • 步骤摘要

  • 步骤 1 – 收集配置信息

  • 步骤 2 – 添加对所需服务和程序集的引用

  • 步骤 3 – 实现管理服务客户端

  • 步骤 4 – 添加标识提供者

目标

  • 确定所需的先决条件和配置信息。

  • 列出添加 OpenID 标识提供者所需的步骤。

概述

管理服务是一项 Web 服务,它是 ACS 的一个关键组成部分。管理服务通过管理门户用户界面展示了可用的功能。可以在管理门户中完成的所有操作都能使用管理服务完成。添加 OpenID 标识提供者后,ACS 将允许您在开发和维护 Internet 范围的身份管理机制时进行保存。若要完成添加 OpenID 标识提供者的任务,请按照特定步骤编写代码。本主题概述了这些基本步骤。

步骤摘要

  • 步骤 1 – 收集配置信息

  • 步骤 2 – 添加对所需服务和程序集的引用

  • 步骤 3 – 实现管理服务客户端

  • 步骤 4 – 添加标识提供者

步骤 1 – 收集配置信息

此步骤确定和显示如何收集所需的配置信息。需要收集以下信息:

  • 管理服务标识用户名ManagementClient

  • 管理服务标识密码 — 若要获取管理服务的服务标识密码,请执行以下操作:

    1. 登录到访问控制服务管理门户 (http://go.microsoft.com/fwlink/?LinkID=129428)。

    2. “管理”部分,单击“管理服务”链接。

    3. “管理服务”页上,单击 ManagementClient 链接(ManagementClient 是服务的实际用户名)。

    4. “凭据”部分,单击“对称密钥”“密码”链接。每个链接中的值相同。这是密码。

  • 服务的命名空间

  • ACS 主机名 — 通常为 accesscontrol.windows.net

收集所需的信息后,请执行这些步骤创建一个示例控制台应用程序,以运行用于添加 OpenID 标识提供者的代码:

  1. 打开 Visual Studio® 2010 并创建新的控制台应用程序项目。

  2. “程序”类中,使用类似以下代码的代码,将以前收集的信息分配到模块范围变量。


        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;


步骤 2 – 添加对所需服务和程序集的引用

此步骤确定所需的依存关系并将其添加到服务和程序集。

将所需的依存关系添加到服务和程序集

  1. 添加对 System.Web.Extensions 的引用。

  2. 添加对管理服务的服务引用。管理服务 URL 对于您的命名空间是唯一的,并且与以下内容类似:

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

  3. 添加以下声明。

    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;
    
    

请注意最后一个声明 ConsoleApplication1.ServiceReference1。如果在创建控制台应用程序或向管理服务添加引用时更改了默认值,则该声明可能会发生变化。

步骤 3 – 实现管理服务客户端

此步骤创建用于封装管理服务客户端实现的方法。

实现管理服务客户端

  1. 将以下方法添加到 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. 实现 GetTokenWithWritePermission 方法及其 helper 方法。它会将 SWT OAuth 令牌添加到 HTTP 请求的 Authorization 标头。

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

步骤 4 – 添加标识提供者

此步骤使用以前创建的管理服务客户端添加 OpenID 标识提供者。

添加 OpenID 标识提供者

  1. Main 方法中,初始化管理服务客户端。

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. 将您的标识提供者添加为颁发者。

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    
    
  3. 创建标识提供者。

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. 更新标识提供者登录地址。在此练习中,您将使用 www.myopenid.com 作为登录地址。其他 OpenID 标识提供者包括 Google 和 Yahoo!,它们都有自己的登录地址。这些登录地址分别为 https://www.google.com/accounts/o8/ud 和 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. 让标识提供者可用于信赖方(管理服务除外)。

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

本文是否对您有所帮助?
(1500 个剩余字符)
© 2013 Microsoft. 版权所有。
facebook page visit twitter rss feed newsletter