将 ACS 联合应用程序和服务部署到 Azure
文档已存档,此处的信息可能已过时

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

更新时间: 2015年6月

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

  • Windows Identity Foundation (WIF)

  • Azure

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

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

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

  3. 使用 RSA 加密 Cookie。

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

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

如果计算模拟器分配的 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 (WIF) 是带外运行时,必须安装在计算机上,以使声明感知应用程序可以使用它。默认情况下,WIF 未安装在 Azure 实例上。若要运行云声明感知应用程序,必须将 WIF 运行时设为在 Azure 实例上可用。执行此操作的最简单方法是在部署包中包含 WIF 程序集。

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

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

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

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

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

如果你创建的是 Web 应用程序,则本节内容与之相关。默认情况下,WIF 使用数据保护应用程序编程接口 (DPAPI) 以加密方式保护 Cookie。Azure 上未提供 DPAPI。为了确保云声明感知 Web 应用程序在部署到 Azure 时正常运行,必须使用 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;
    
    note备注
    如果你已添加 Application_Start 事件处理程序,则可以更新它,使之包括此代码。

  5. 保存你的工作。

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

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

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

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

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

另请参阅

显示:
© 2016 Microsoft