本文档已存档,并且将不进行维护。

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

发布时间: 2011年5月

更新时间: 2015年6月

应用到: Azure

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

若要运行本示例,你需要:

  1. Azure 门户中的帐户,和一个“访问控制”命名空间。

  2. Visual Studio 2010(任何版本)

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

  4. Windows Identity Foundation SDK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • AcsHostUrl - 这是 ACS 的主机名。

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

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

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

    有关如何获取这些密钥的详细信息,请参阅如何:将 Facebook 配置为标识提供程序 (http://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”字段中,然后单击“下一步”。对于此示例,该值是 http://localhost:64000/

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

  4. 在下一个窗口中,选择“使用现有 STS”单选按钮,并输入 “访问控制”命名空间发布的 WS 联合身份验证元数据的 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 进行保护的。你选取标识提供程序并进行身份验证后,系统将引导你返回到“目录”页。

显示: