Windows Identity Foundation (WIF) 应用程序 + 经典管道模式下的 ADFS 2.0 - 可能吗?

Windows Identity Foundation (WIF) 应用程序 + 经典管道模式下的 ADFS 2.0 - 可能吗?

我有一个工作测试应用程序,它使用 Windows Identity Foundation SDK 和 ADFS 2.0 进行身份验证,它在 Windows Server 2008 R2、IIS 7.5、集成托管管道应用程序池模式下运行。

我的问题是,由于遗留代码,我需要使用这种身份验证设置的“真实”应用程序只能在经典托管管道应用程序池模式下运行,当我选择它时,我收到“HttpException(0x80004005):无法执行 URL”错误。

有人知道如何解决这个问题吗?

更新:我发现https://example.com/myapplicatio/给了我错误,但是https://example.com/myapplicati​​o/Default.aspx作品。

答案1

我遇到了同样的问题。这里还有另一个类似的讨论。你最终解决了你的问题吗?

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/43392dc5-e764-4027-8de5-1638a4c17540

paullem 在底部的评论很有用。

答案2

我能够找到导致我的应用程序因该错误而失败的原因的解决方案。

在我的虚拟环境中,我尝试获取 MOSS 2007 外部网络实例,以使用 SharePointClaimsMembershipProvider 使用 ADFS 2.0 服务器进行身份验证。

我从其他答案中得到的提示是声明身份没有得到正确填充,特别是在使用匿名访问时。有些人提供了一些代码来处理匿名访问的情况。

就我而言,我正在进行身份验证,但仍然收到此错误。因此,基本上,问题是 ADFS2.0 没有提供我的应用程序配置的声明身份类型。

您可以在 web.config 文件中看到您想要为您的应用程序获取哪些声明。

 <microsoft.identityModel>
    <service>
      <audienceUris>
        <add value="https://moss2007hv.kor.cmil.mil/" />
      </audienceUris>
      <applicationService>
        <claimTypeRequired>
          <!--Following are the claims offered by STS 'http://adfs.kor.cmil.mil/adfs/services/trust'. Add or uncomment claims that you require by your application and then update the federation metadata of this application.-->
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true" />
          <claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true" />
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/CommonName" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/EmailAddress" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/Group" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/UPN" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname" optional="true" />-->
        </claimTypeRequired>
      </applicationService>
      <!--Commented out by Federation Utility for SharePoint 3.0-->
      <!--<serviceCertificate><certificateReference x509FindType="FindByThumbprint" findValue="DAC77B6076433468D5E1030F8B66126BF261F2BB" storeLocation="LocalMachine" storeName="My" /></serviceCertificate>-->
      <federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://adfs.kor.cmil.mil/adfs/ls/" realm="https://moss2007hv.kor.cmil.mil/" requireHttps="true" />
        <cookieHandler requireSsl="true" />
      </federatedAuthentication>
      <serviceCertificate>
        <certificateReference x509FindType="FindByThumbprint" findValue="DAC77B6076433468D5E1030F8B66126BF261F2BB" storeLocation="LocalMachine" storeName="My" />
      </serviceCertificate>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="FC144B44D2D81BCA7CFB933A8D818236C94E8505" name="http://adfs.kor.cmil.mil/adfs/services/trust" />
        </trustedIssuers>
      </issuerNameRegistry>
    </service>
  </microsoft.identityModel>

在上面的示例中,名称和角色声明是预期的。

因此,我回到我的 ADFS 服务器并验证我是否正确创建了信赖方信任。

接下来,右键单击依赖方信任并编辑声明规则。右键单击现有规则或添加规则(如果不存在)。对于此示例,我注意到我没有为名称设置传出声明类型。因此,我使用了 LDAP 属性:User-Principle-Name 并将其映射到传出声明类型名称。

对于角色,我使用了 Token-Groups-Unqualified Names 并将其映射到角色。

一旦我在 ADFS 服务器上正确配置了规则以提供我的 web.config 中请求的声明,错误就会消失,一切都会按预期运行。

相关内容