将 ACS 联合应用程序和服务部署到 Azure

应用于

  • Microsoft Azure Active Directory 访问控制(也称为访问控制服务或 ACS)

  • Windows Identity Foundation (WIF)

  • Microsoft Azure

总结

本主题整合了开发使用 ACS 的应用程序和服务并将其部署到 Azure 时应考虑的准则。

目标

  1. 绕开使用计算模拟器动态生成的端口。

  2. 将 Windows Identity Foundation (WIF) 运行时部署到 Azure。

  3. 使用 RSA 加密 Cookie。

  4. 配置通过反射调用的程序集以部署到 Azure。

绕开使用计算模拟器动态生成的端口

如果你创建的是 Web 应用程序,则本节内容与之相关。 如果你创建的是 Web 服务,则本节内容与之无关。 计算Emulator是 Azure SDK 工具的一部分。 在将应用程序部署为托管服务之前,可以使用它来运行、测试、调试和微调应用程序。 在计算模拟器中,无法分配唯一的 IP 地址。 计算模拟器会尝试分配请求的端口。 如果该端口不可用,它将分配下一个最佳可用端口号。 这意味着在计算模拟器中,可能会为你的服务分配与你在定义文件中指定的端口号不同的端口号。 有关计算Emulator的详细信息,请参阅 Azure 计算Emulator () https://go.microsoft.com/fwlink/?LinkId=221212 Windows概述。

如果计算Emulator分配的 IP 地址不同于在 ACS 管理门户中配置为“返回 URL”的 IP 地址,ACS 会将经过身份验证的请求重定向到信赖方配置的“返回 URL”字段中配置的 URL,但此 URL 中不存在匹配的页面。 因此,将向你显示空白页。

若要避免此行为,请将云 Web 应用程序的终结点公共端口配置为你计算机上的可用端口。 于是,计算模拟器就不会分配随机端口,以避免冲突。

将终结点配置为使用可用端口

  1. 若要打开命令提示符,请单击“开始”,键入 cmd,然后按 Enter

  2. 运行以下命令以显示具有已用端口的本地主机 IP 地址列表: netstat –a –n | findstr 127.0.0.1

  3. 快速浏览该列表,并确定当前未在使用的端口。 你将在后续步骤中使用该端口。

  4. 解决方案资源管理器中,双击位于云项目的“角色文件夹中的角色。 此时将打开角色属性页。

  5. “Web 角色属性” 页上,单击“ 终结点 ”选项卡。

  6. 在“公共端口”文件中,指定 在步骤 3 中标识的端口值。

  7. 若要保存你的工作,请按 Ctrl+S。

将 Windows Identity Foundation 运行时部署到 Windows Azure

Windows Identity Foundation (WIF) 是带外运行时,必须安装在计算机上,以使声明感知应用程序可以使用它。 默认情况下,WIF 不会安装在 Azure 实例上。 若要运行云声明感知应用程序,必须在 Azure 实例上提供 WIF 运行时。 执行此操作的最简单方法是在部署包中包含 WIF 程序集。

在 Windows Azure 部署包中包含 WIF 程序集

  1. 解决方案资源管理器中,找到声明感知应用程序。

  2. 展开“引用”文件夹。

  3. “引用”文件夹下找到 Microsoft.IdentityModel 程序集。

  4. 右键单击该程序集,然后单击“属性”

  5. 在属性窗口中,将“复制本地”指定为 True将特定版本 指定为 False

使用 RSA 加密 Cookie

如果你创建的是 Web 应用程序,则本节内容与之相关。 默认情况下,WIF 使用数据保护应用程序编程接口 (DPAPI) 以加密方式保护 Cookie。 DPAPI 在 Azure 上不可用。 若要确保云声明感知 Web 应用程序在部署到 Azure 时正常运行,必须使用 RSA 添加 Cookie 加密功能。

使用 RSA 加密 Cookie

  1. 解决方案资源管理器中,找到云声明感知 Web 应用程序。

  2. 在Visual Studio编辑器中打开 global.asax.cs 文件,该文件是 global.asax 文件背后的代码。

  3. 添加以下声明:

    using Microsoft.IdentityModel.Tokens;
    using Microsoft.IdentityModel.Web;
    using Microsoft.IdentityModel.Web.Configuration;
    
  4. 添加以下代码:

    void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        //
        // Use the <serviceCertificate> to protect the cookies that are
        // sent to the client.
        //
        List<CookieTransform> sessionTransforms =
            new List<CookieTransform>(new CookieTransform[] {
            new DeflateCookieTransform(), 
            new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate),
            new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate)  });
        SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
        e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
    }
    
    void Application_Start(object sender, EventArgs e)
    {
        FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
    

    注意

    如果你已添加 Application_Start 事件处理程序,则可以更新它,使之包括此代码。

  5. 保存所有内容。

配置通过要部署到 Windows Azure 的反射调用的程序集

在某些情况下,程序集是通过反射调用的,例如,在开发用于检查传入 SWT 令牌的具象状态传输 (REST) wcf 服务或 HttpModule 时。 若要确保这些程序集部署到 Azure,必须执行额外的步骤才能将其添加到部署包。

将通过反射调用的程序集添加到 Windows Azure 部署包

  1. 展开云声明感知 Web 应用程序或服务的 bin 文件夹。

  2. 右键单击该程序集,然后单击“包括在项目中”

  3. 右键单击同一库,然后单击“属性”

  4. “属性”窗口中,针对“复制到输出目录”单击“如果较新则复制”

另请参阅

概念

ACS 准则索引