导出 (0) 打印
全部展开

如何:使用管理服务将 AD FS 2.0 配置为企业标识提供者

发布时间: 2011年4月

更新时间: 2011年5月

应用到: Windows Azure

适用于

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

  • Microsoft Active Directory® 联合身份验证服务 (AD FS) 2.0

摘要

本主题概述了将 AD FS 2.0 添加为标识提供者所需要的基本步骤。使用位于 http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) 的管理门户可以将 AD FS 2.0 作为标识提供者添加到 ACS,或者还可以通过 ACS 管理服务自动处理此过程。例如,在构建用于管理 ACS 的自定义用户界面时或在为多租户软件即服务 (SaaS) 解决方案自动注册新租户时,使用管理服务将非常有用。

内容

  • 目标

  • 概述

  • 步骤摘要

  • 步骤 1 – 收集配置信息

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

  • 步骤 3 – 实现管理服务代理

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

  • 步骤 5 – 测试您的工作

目标

  • 识别必需的先决条件和配置信息。

  • 列出将 AD FS 2.0 添加为标识提供者所需的步骤。

  • 测试该配置成功。

概述

管理服务是作为 ACS 关键组件之一的一项 Web 服务。管理服务通过管理门户用户界面展示了可用的功能。可以在管理门户中完成的任何操作,也都可以使用管理服务做到。将 Microsoft AD FS 2.0 作为标识提供者添加到 ACS,使您可以将企业标识管理上的投资重用于基于云的解决方案。要完成将 AD FS 2.0 配置为标识提供者的任务,您需要编写遵循特定步骤的代码。本主题概述了这些基本步骤。

步骤摘要

  • 步骤 1 – 收集配置信息

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

  • 步骤 3 – 实现管理服务代理

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

  • 步骤 5 – 测试您的工作

步骤 1 – 收集配置信息

此步骤标识必要的配置信息并说明如何收集这些信息。您需要收集以下信息:

  • 管理服务标识用户名 - ManagementClient

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

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

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

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

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

  • 您的命名空间

  • ACS 主机名 - accesscontrol.windows.net

  • 签名证书字符 - 获取来自 AD FS 2.0 部署的 AD FS 签名证书字符串。

在收集到需要的信息后,执行以下步骤来创建一个示例控制台应用程序(它将执行用于将 AD FS 2.0 添加为标识提供者的代码):

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

  2. Program 类中,使用与下面类似的代码将之前收集的信息分配给模块作用域变量。

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    
    
    

步骤 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;
    
    

步骤 3 – 实现管理服务代理

此步骤创建了封装管理服务代理的实现的方法。

实现管理服务代理

  1. 将以下方法添加到 Program 类。

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                ManagementService managementService = 
    new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
    
  2. 实现 GetTokenWithWritePermission 方法及其帮助程序方法。它将 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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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 – 添加标识提供者

此步骤使用之前创建的管理服务代理将 AD FS 2.0 添加为标识提供者。

将 AD FS 2.0 添加为标识提供者

  1. 初始化管理服务代理。

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

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

    IdentityProvider identityProvider = new IdentityProvider()
    {
        DisplayName = identityProviderName,
        Description = identityProviderName,
        WebSSOProtocolType = "WsFederation",
        IssuerId = issuer.Id
    };
           svc.AddObject("IdentityProviders", identityProvider);
    
    
  4. 基于您之前获取的证书创建标识提供者签名密钥。

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
    
  5. 更新标识提供者登录地址。

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    
  6. 使标识提供者对除管理服务之外的信赖方可用。

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
    

步骤 5 – 测试您的工作

测试您的工作

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

  2. 在“访问控制服务”页,单击“信任关系”部分的“规则组”链接。

  3. 单击任意可用的规则。

  4. 在“编辑规则组”页,单击“添加规则”链接。

  5. 在“添加声明规则”页,从“声明颁发者”部分的下拉列表中选择新近添加的标识提供者。

  6. 保留其余的默认值。

  7. 单击“保存”。

您刚刚为标识提供者创建了一个传递规则。

显示:
© 2014 Microsoft