代码示例: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) 子目录中。
先决条件
若要运行此示例,需要:
Azure 门户和访问控制命名空间中的帐户。
Visual Studio 2010 (任何版本)
Windows Identity Foundation SDK
有关详细信息,请参阅 ACS 先决条件 (https://go.microsoft.com/fwlink/?LinkId=221065) 。
配置示例
可以使用 ACS 管理门户或 ACS 管理服务执行此示例所需的 ACS 配置。 本主题介绍了这两个选项。
选项 1:通过 ACS 管理门户配置示例
在 ACS 管理门户中配置示例
转到Microsoft Azure管理门户 () https://manage.WindowsAzure.com 登录,然后单击“Active Directory”。 (故障排除提示: “Active Directory”项缺失或不可用)
若要创建访问控制命名空间,请依次单击“新建”、“应用程序服务”和“访问控制”,然后单击“快速创建”。 (或者,先单击“访问控制命名空间”,然后单击“新建”。)
若要管理访问控制命名空间,请选择该命名空间,然后单击“管理”。 (或者,单击“访问控制命名空间”,选择命名空间,然后单击“管理”。)
此操作将打开访问控制服务管理门户。
若要与标识提供程序建立关系,请单击“标识提供程序”,然后选择要使用的标识提供程序,如 Google、Yahoo! 和 Facebook。 有关如何获取 Facebook 先决条件密钥的详细信息,请参阅 如何:将 Facebook 配置为标识提供者 (https://go.microsoft.com/fwlink/?LinkId=221151) 。 然后,单击页左侧导航菜单中的“主页”链接,以返回到主页。
若要将应用程序注册到 ACS,请在访问控制服务管理门户中,单击主页上的信赖方应用程序链接,选择“添加”,并在窗体中输入以下信息:
在“名称”字段中,输入 ASPNET MVC3 Custom。
在 “领域” 字段中,输入 https://localhost:64000/
在 “返回 URL ”字段中,输入 https://localhost:64000/Account/SignIn
在“令牌格式”字段中,选择“SAML 2.0”。
在“标识提供程序”部分中,选择 Facebook、Google、Windows Live ID 和 Yahoo!
在“令牌签名”字段中,选择“使用服务命名空间证书(标准)”。
单击“保存”,然后导航回主页。
配置信赖方应用程序后,现在可以创建规则来确定 ACS 向应用程序发出的声明。 在此示例中,我们将传递标识提供程序发出的所有声明。 若要创建此规则,请单击位于主页中的“规则组”,然后单击“用于 ASPNET MVC3 自定义的默认规则组”规则组。
在页面底部,单击“生成”链接。 确保选中 Facebook、 Yahoo,然后单击“ 生成”。
配置 ACS 后,打开Visual Studio。
选项 2:使用 ACS 管理服务配置示例
Visual Studio示例解决方案有一个名为 ConfigureSample 的命令行应用程序,该应用程序使用 ACS 管理服务和 Common 类库中定义的常见帮助程序。 此应用程序可用于配置访问控制命名空间以用于此示例。
使用 ACS 管理服务配置示例
使用有关访问控制命名空间的信息更新 Common 类库。 打开 SamplesConfiguration.cs 并输入以下信息:
ServiceNamespace - 这是用于 ACS 的命名空间。
ManagementServiceIdentityName - 这是管理服务帐户的名称。
ManagementServiceIdentityKey - 这是与管理服务帐户关联的密码。
AcsHostUrl - 这是 ACS 的主机名。
在 ConfigureSample 项目中,打开 Program.cs 并输入以下信息:
applicationId - 这是 Facebook 应用程序的应用程序 ID。
applicationSecret - 这是 Facebook 应用程序的应用程序机密。
有关如何获取这些密钥的详细信息,请参阅 如何:将 Facebook 配置为标识提供者 (https://go.microsoft.com/fwlink/?LinkId=221151) 。
在 Visual Studio中运行 ConfigureSample 应用程序,它将配置 ACS 以运行此示例。
运行示例
运行示例
在 Visual Studio 中打开 Websites\MVC3CustomSignInPage\MVC3CustomSignInPage.sln 中的示例。
若要将 ACS 添加为 STS 引用,请右键单击 MVCCustomSignInPage ,并从上下文菜单中选择 “添加 STS 引用 ”。
在对话框中,将 Web 应用程序的根路径输入到“应用程序 URI”字段中,然后单击“下一步”。 对于此示例,此值为 https://localhost:64000/
注意
尾部斜杠很重要,因为它与在 ACS 中输入的值一起排队供信赖方使用。 如果站点未使用 SSL,此向导将发出警告。 单击“是”按钮接受此警告,但请记住,对于这些类型的方案,产品网站几乎始终应使用 SSL。
在下一个窗口中,选择“使用现有 STS”单选按钮,并输入由访问控制命名空间发布的WS-Federation元数据的 URI。 可以在门户中“应用程序集成”下找到该 URI。 如果访问控制命名空间为 mvc3samples,则 URI https:// mvc3samples.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml。 在输入此值后,单击“下一步”。
由于你的网站不需要加密的令牌,请在其余对话框上单击“下一步”,然后单击“完成”。
应用程序现已配置为将 ACS 与 ASP .NET 总资源保护配合使用。 我们需要禁用此保护,以便使用我们自己的具有更详细 MVC3 身份验证筛选器的自定义登录页。 在 web.config 文件中的“配置”下,删除以下设置:
<location path="FederationMetadata"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
在 system.web 下删除以下设置:
<authorization> <deny users="?" /> </authorization>
删除这两个设置后,ASP.NET 将不会代表我们执行任何身份验证或授权。
按 Visual Studio 中的 F5 运行应用程序。 浏览器将带你访问应用程序的主页。
单击右上角的“登录”链接,然后从显示的列表中选择标识提供程序。 进行身份验证后,将返回到主页,用户信息将显示在右上角 (请注意,不会提供用户名) 。
单击“注销”完成注销。 这将清除会话 Cookie,并将你返回到主页。
单击“目录”链接。 由于你不再进行身份验证,系统将要求你选取用于访问“目录”页的标识提供程序。
这是因为“目录”页(DirectoryController 中的索引)是通过 RequireAuthenticationAttribute 进行保护的。 你选取标识提供程序并进行身份验证后,系统将引导你返回到“目录”页。