我有一个工作测试应用程序,它使用 Windows Identity Foundation SDK 和 ADFS 2.0 进行身份验证,它在 Windows Server 2008 R2、IIS 7.5、集成托管管道应用程序池模式下运行。
我的问题是,由于遗留代码,我需要使用这种身份验证设置的“真实”应用程序只能在经典托管管道应用程序池模式下运行,当我选择它时,我收到“HttpException(0x80004005):无法执行 URL”错误。
有人知道如何解决这个问题吗?
更新:我发现https://example.com/myapplicatio/给了我错误,但是https://example.com/myapplicatio/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 中请求的声明,错误就会消失,一切都会按预期运行。