问题:在 Visual Studio 2013 年创建 AD FS 声明感知应用程序

Issue: creating AD FS claims aware application in Visual Studio 2013

我刚开始尝试使用 AD FS,我已经 运行 熟悉了。

  1. 正在尝试制作声明感知应用程序
  2. 组织处理自己的身份验证

我已经让我的测试应用程序验证身份验证,但它似乎不对。

  1. 在 Visual Studio
  2. 中创建新应用程序
  3. 选择网络 -> Visual Studio
  4. 选择 .Net Framework 4.5
  5. Select ASP.Net MVC 4 网络应用程序
  6. 添加对 System.Identity
  7. 的引用
  8. 添加对 System.Identity.Services
  9. 的引用
  10. 编辑我的 web.Config 文件
  11. 在配置部分 -- 添加以下内容
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
  1. 然后添加
<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="ida:FederationMetadataLocation" value="https://fedtest.xxxxxxxx.com/FederationMetadata/2007-06/FederationMetadata.xml" />
    <add key="ida:Realm" value="https://myappNameHere.xxxxxx.com" />
    <add key="ida:AudienceUri" value="http://myappNameHere.xxxxxxx.com" />
    <add key="loginUrl" value="~/Home" />
  </appSettings>
  1. 然后添加
     <location path="Home">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
      </location>
        <location path="Logout.html">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
  1. 然后添加
    <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
        <authorization>
          <deny users="?" />
        </authorization>
        <authentication mode="None" />
    </system.web>
  1. 然后添加
    <identityConfiguration>
            <audienceUris>
                <add value="http://myappName.xxxxxx.com/" />
            </audienceUris>`
                  
          <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
            <authority name="http://fedtest.xxxxxxx.com/adfs/services/trust">
              <keys>
                <add thumbprint="12345567890asdasfsdgdfhdfgjdf123124" />
              </keys>
              <validIssuers>
                <add name="http://fedtest.xxxxxxxx.com/adfs/services/trust" />
              </validIssuers>
            </authority>
          </issuerNameRegistry>
          <securityTokenHandlers>
            <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          </securityTokenHandlers>
    
            <certificateValidation certificateValidationMode="None" />
        </identityConfiguration>
    </system.identityModel>
    <system.identityModel.services>
        <federationConfiguration>
            <cookieHandler requireSsl="true" />
            <wsFederation passiveRedirectEnabled="true"
                          issuer="https://fedtest.xxxxxxxxx.com/adfs/ls/"
                          realm="https://myappName.xxxxxxxx.com/"
                          reply="https://myappName.xxxxxxxxx.com/" 
                          requireHttps="true" />
        </federationConfiguration>
    </system.identityModel.services>

为什么我认为这一切都是错误的??好吧,我从以下步骤中得到了 web.config 的所有行...

  1. 返回第 5 步并执行以下操作
  2. 在 Tempalte 下点击 web
  3. 选择了唯一的选项 --- ASP.NET Web 应用程序
  4. 向导出现并单击 'change Authentication'
  5. 选择组织帐户
  6. 将下拉列表更改为 'On Premises'
  7. 填写'On-Premises Authority'
  8. 填写'App ID URI'
  9. 看看web.config

但是使用这些步骤生成的应用程序会创建一个重定向循环,我从来没有解决过这个问题。

所以 -- 关于我做错了什么的建议。不能认为以标准方式生成 web.config 并将其粘贴到以前的版本中以使其工作是正确的。

参考:Use the On-Premises Organizational Authentication Option (ADFS) With ASP.NET in Visual Studio 2013.

在重定向循环方面。通常的原因是,对于您的 ADFS RP,您配置的端点没有尾部斜杠。

添加缺失的“/”并确保它与您的 web.config.

中的字符串匹配

在您的应用程序中启用 SSL 并将 SSL URL 设置为您的网络媒体资源中的默认值。

好的——最后的答案是……

1) 我开始走这条路是因为我不断收到我认为是由 web.config.

引起的重定向循环

这不是 web.config。

2) 因此,按照您在 VS 13 中应该创建的方式创建应用程序——即转到 c# -> web -> 然后单击 ASP.NET Web 应用程序并设置内部身份验证

3) 我的重定向循环是由来自 AD FS

的多个 LDAP 声明捆绑在一起引起的

4) 一次发送一条规则并像魔术一样工作。

如果有人能阐明为什么这是真的,我很好奇。