代码示例:ASP.NET MVC 3 自定义登录页

更新时间:2015 年 6 月 19 日

适用于:Azure

此示例演示如何在 ASP.NET MVC3 应用程序中创建自定义登录名或主领域发现页,该应用程序使用Microsoft Azure Active Directory 访问控制 (也称为访问控制服务或 ACS) 。 此示例的代码位于 Microsoft Azure Active Directory 访问控制 (ACS) 代码示例包的 MVC3CustomSignInPage (C#\Websites\MVC3CustomSignInPage) 子目录中。

先决条件

若要运行此示例,需要:

  1. Azure 门户和访问控制命名空间中的帐户。

  2. Visual Studio 2010 (任何版本)

  3. ASP .NET MVC3 (https://www.asp.net/mvc/mvc3)

  4. Windows Identity Foundation SDK

有关详细信息,请参阅 ACS 先决条件 (https://go.microsoft.com/fwlink/?LinkId=221065) 。

配置示例

可以使用 ACS 管理门户或 ACS 管理服务执行此示例所需的 ACS 配置。 本主题介绍了这两个选项。

选项 1:通过 ACS 管理门户配置示例

在 ACS 管理门户中配置示例

  1. 转到Microsoft Azure管理门户 () https://manage.WindowsAzure.com 登录,然后单击“Active Directory”。 (故障排除提示: “Active Directory”项缺失或不可用)

  2. 若要创建访问控制命名空间,请依次单击“新建”、“应用程序服务”和“访问控制”,然后单击“快速创建”。 (或者,先单击“访问控制命名空间”,然后单击“新建”。)

  3. 若要管理访问控制命名空间,请选择该命名空间,然后单击“管理”。 (或者,单击“访问控制命名空间”,选择命名空间,然后单击“管理”。)

    此操作将打开访问控制服务管理门户。

  4. 若要与标识提供程序建立关系,请单击“标识提供程序”,然后选择要使用的标识提供程序,如 Google、Yahoo! 和 Facebook。 有关如何获取 Facebook 先决条件密钥的详细信息,请参阅 如何:将 Facebook 配置为标识提供者 (https://go.microsoft.com/fwlink/?LinkId=221151) 。 然后,单击页左侧导航菜单中的“主页”链接,以返回到主页。

  5. 若要将应用程序注册到 ACS,请在访问控制服务管理门户中,单击主页上的信赖方应用程序链接,选择“添加”,并在窗体中输入以下信息:

    • “名称”字段中,输入 ASPNET MVC3 Custom

    • “领域” 字段中,输入 https://localhost:64000/

    • “返回 URL ”字段中,输入 https://localhost:64000/Account/SignIn

    • 在“令牌格式”字段中,选择“SAML 2.0”

    • “标识提供程序”部分中,选择 FacebookGoogleWindows Live IDYahoo!

    • 在“令牌签名”字段中,选择“使用服务命名空间证书(标准)”

  6. 单击“保存”,然后导航回主页。

  7. 配置信赖方应用程序后,现在可以创建规则来确定 ACS 向应用程序发出的声明。 在此示例中,我们将传递标识提供程序发出的所有声明。 若要创建此规则,请单击位于主页中的“规则组”,然后单击“用于 ASPNET MVC3 自定义的默认规则组”规则组。

  8. 在页面底部,单击“生成”链接。 确保选中 FacebookYahoo,然后单击“ 生成”。

  9. 配置 ACS 后,打开Visual Studio。

选项 2:使用 ACS 管理服务配置示例

Visual Studio示例解决方案有一个名为 ConfigureSample 的命令行应用程序,该应用程序使用 ACS 管理服务和 Common 类库中定义的常见帮助程序。 此应用程序可用于配置访问控制命名空间以用于此示例。

使用 ACS 管理服务配置示例

  1. 使用有关访问控制命名空间的信息更新 Common 类库。 打开 SamplesConfiguration.cs 并输入以下信息:

    • ServiceNamespace - 这是用于 ACS 的命名空间。

    • ManagementServiceIdentityName - 这是管理服务帐户的名称。

    • ManagementServiceIdentityKey - 这是与管理服务帐户关联的密码。

    • AcsHostUrl - 这是 ACS 的主机名。

  2. ConfigureSample 项目中,打开 Program.cs 并输入以下信息:

    1. applicationId - 这是 Facebook 应用程序的应用程序 ID。

    2. applicationSecret - 这是 Facebook 应用程序的应用程序机密。

    有关如何获取这些密钥的详细信息,请参阅 如何:将 Facebook 配置为标识提供者 (https://go.microsoft.com/fwlink/?LinkId=221151) 。

  3. 在 Visual Studio中运行 ConfigureSample 应用程序,它将配置 ACS 以运行此示例。

运行示例

运行示例

  1. 在 Visual Studio 中打开 Websites\MVC3CustomSignInPage\MVC3CustomSignInPage.sln 中的示例。

  2. 若要将 ACS 添加为 STS 引用,请右键单击 MVCCustomSignInPage ,并从上下文菜单中选择 “添加 STS 引用 ”。

  3. 在对话框中,将 Web 应用程序的根路径输入到“应用程序 URI”字段中,然后单击“下一步”。 对于此示例,此值为 https://localhost:64000/

    注意

    尾部斜杠很重要,因为它与在 ACS 中输入的值一起排队供信赖方使用。 如果站点未使用 SSL,此向导将发出警告。 单击“是”按钮接受此警告,但请记住,对于这些类型的方案,产品网站几乎始终应使用 SSL。

  4. 在下一个窗口中,选择“使用现有 STS”单选按钮,并输入由访问控制命名空间发布的WS-Federation元数据的 URI。 可以在门户中“应用程序集成”下找到该 URI。 如果访问控制命名空间为 mvc3samples,则 URI https:// mvc3samples.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml。 在输入此值后,单击“下一步”

  5. 由于你的网站不需要加密的令牌,请在其余对话框上单击“下一步”,然后单击“完成”

  6. 应用程序现已配置为将 ACS 与 ASP .NET 总资源保护配合使用。 我们需要禁用此保护,以便使用我们自己的具有更详细 MVC3 身份验证筛选器的自定义登录页。 在 web.config 文件中的“配置”下,删除以下设置:

    <location path="FederationMetadata">
       <system.web>
         <authorization>
           <allow users="*" />
         </authorization>
       </system.web>
    </location>
    
  7. system.web 下删除以下设置:

    <authorization>
         <deny users="?" />
       </authorization>
    

    删除这两个设置后,ASP.NET 将不会代表我们执行任何身份验证或授权。

  8. Visual Studio 中的 F5 运行应用程序。 浏览器将带你访问应用程序的主页。

  9. 单击右上角的“登录”链接,然后从显示的列表中选择标识提供程序。 进行身份验证后,将返回到主页,用户信息将显示在右上角 (请注意,不会提供用户名) 。

  10. 单击“注销”完成注销。 这将清除会话 Cookie,并将你返回到主页。

  11. 单击“目录”链接。 由于你不再进行身份验证,系统将要求你选取用于访问“目录”页的标识提供程序。

这是因为“目录”页(DirectoryController 中的索引)是通过 RequireAuthenticationAttribute 进行保护的。 你选取标识提供程序并进行身份验证后,系统将引导你返回到“目录”页。