Asp.net mvc 4 如何使用商业身份提供商(如ADFS2)

Asp.net mvc 4 如何使用商业身份提供商(如ADFS2),asp.net-mvc-4,ws-federation,Asp.net Mvc 4,Ws Federation,我正在运行Win 7、IIS 7.0和VS2012 我已经创建了asp.mvc4 web应用程序 我在一个单独的虚拟机上安装了ADFS2.0 在VS 2012中使用身份和访问工具 我选择Useabusinessidentityprovider(例如ADFS2)并键入指向STS元数据文档的url 编辑了web配置 <system.web> ... <httpModules> ... <remove name="FormsAuthentication" /&g

我正在运行Win 7、IIS 7.0和VS2012 我已经创建了asp.mvc4 web应用程序 我在一个单独的虚拟机上安装了ADFS2.0

在VS 2012中使用身份和访问工具

我选择Useabusinessidentityprovider(例如ADFS2)并键入指向STS元数据文档的url

编辑了web配置

<system.web>
...
<httpModules>
...
    <remove name="FormsAuthentication" />
</httpModules>
</system.web>

...
...
还有这个

<system.webServer>
...
   <modules>
   ...
      <remove name="FormsAuthentication" />
   </modules>
</system.webServer>

...
...
还检查了项目是否禁用了Windows身份验证

该网站重定向到类似以下url的url http://localhost/website/login.aspx?ReturnUrl=%2fWebSite%2f,该url存在“找不到资源”错误

我还需要做些什么才能使这项工作顺利进行

Microsoft doco是轻量级的


我已经在本地开发STS上遇到了类似的问题,这花了我好几天的时间来解决,但这些都是我为了让它运行所做的事情。还有很多事情要做

先决条件:

  • 在您的域上某处运行的ADFS 2.0服务
  • IIS 7具有自签名证书或可在域中使用的证书
  • 安装了Identity and Access(1.0.2版)扩展的Visual Studio 2012
  • 要在IIS上运行的MVC4 web应用程序集
  • 确保将自签名证书添加到站点,以便您可以通过https访问该站点
  • 您可能需要调整计算机的防火墙设置,以允许访问ADFS 2.0服务
在开发工作站上

在MVC4项目中

  • 右键单击web项目,打开“标识和访问”对话框
  • 选择使用商业身份提供商(如ADFS2)
  • 输入STS元数据文档的路径,例如https://{ADFS服务器路径}/FederationMetadata/2007-06/FederationMetadata.xml
  • 输入应用程序的域,例如https://{WEB应用程序URL}/
  • 后面的斜杠会有所不同
  • 通过接受这些更改退出对话框
将以下代码添加到项目中

在ADFS 2.0服务器上

  • 如果使用自签名证书,请导航到web应用程序https://{web应用程序URL}/并将区域更改为受信任站点
  • 在浏览器的地址栏中,您应该能够右键单击证书并安装(您只能安装来自受信任站点的证书)需要在受信任的根权限->注册表下安装证书
  • 打开ADFS控制台,添加依赖方信任,使用联合元数据地址https://{WEB应用程序URL}/FederationMetadata/2007-06/FederationMetadata.xml
添加一些自定义规则

MVC4需要这些规则才能生成可用的ClaimsPrincipal

在Name属性上添加传递规则

这两条习惯规则

=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = "true");

=> issue(Type = "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", Value = "true");
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Value = "true");

=> issue(Type = "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", Value = "true");