我开发了一个使用 WCF 服务作为后端的 ASP.NET 前端解决方案。该网站目前使用 ADFS 1.0 进行身份验证(我无法控制 ADFS 的实现,但它已针对我的 Web 应用程序进行了配置)。此外,无法升级到 ADFS 2.0(至少在不久的将来不会)
Web.config 中的配置如下:
<httpModules>
<add name="Identity Federation Services Application Authentication Module" type="System.Web.Security.SingleSignOn.WebSsoAuthenticationModule, System.Web.Security.SingleSignOn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null" />
</httpModules>
<membership defaultProvider="SingleSignOnMembershipProvider2">
<providers>
<add name="SingleSignOnMembershipProvider2" type="System.Web.Security.SingleSignOn.SingleSignOnMembershipProvider2, System.Web.Security.SingleSignOn.PartialTrust, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fs="https://urltoadfs/adfs/fs/FederationServerService.asmx" />
</providers>
</membership>
<websso>
<authenticationrequired />
<urls>
<returnurl>https://myapplication/</returnurl>
</urls>
<fs>https://urltoadfs/adfs/fs/FederationServerService.asmx</fs>
<isSharePoint />
</websso>
这工作正常,我可以使用 ADFS 中的帐户访问应用程序。问题是我需要将此声明身份转换为 WindowsIdentity才能访问后端 WCF 服务(它们使用带有模拟/委托的 Windows 身份验证)。
有什么方法可以使用 ADFS 1.0 完成此任务?我曾尝试使用 WIF (Windows Identity Foundation),但如果可以将它与 ADFS 1.0 一起用作 STS,我找不到任何明确的信息。我还调查了“基于 Windows NT 令牌的应用程序”选项(http://technet.microsoft.com/en-us/library/cc784956(v=ws.10).aspx),但我想避免更改如果可能,在当前的 ADFS 实现中。
为了测试 WIF 选项,我在 Web.config 中使用了以下配置(移除了 websso 上的部分):
<httpModules>
<add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="ClaimsAuthorizationModule" type="Microsoft.IdentityModel.Web.ClaimsAuthorizationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>
<microsoft.identityModel>
<service>
<audienceUris>
<add value="https://myapplication/" />
</audienceUris>
<applicationService>
<claimTypeRequired>
<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" optional="true" />
</claimTypeRequired>
</applicationService>
<securityTokenHandlers>
<add type="Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<samlSecurityTokenRequirement mapToWindows="true" useWindowsTokenService="true" />
</add>
</securityTokenHandlers>
<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true"
issuer="https://urltoadfs/adfs/fs/FederationServerService.asmx"
realm="https://myapplication/"
requireHttps="true" />
</federatedAuthentication>
</service>
</microsoft.identityModel>
我还在网络服务器上运行“对 Windows 令牌服务的声明”(c2WTS)。
我被重定向到 ADFS 服务器,但我只收到来自服务器的一般错误。