使用 WIF 令牌保护的 WCF 服务需要公共方法
Posted
技术标签:
【中文标题】使用 WIF 令牌保护的 WCF 服务需要公共方法【英文标题】:WCF service secured with WIF token needs public method 【发布时间】:2012-12-05 20:34:41 【问题描述】:我有一个 WCF 服务托管在 <ws2007FederationHttpBinding>
的单个端点上。该服务使用 WIF 令牌进行保护。
服务有一种方法void IsOnline()
来确定服务的可用性。此方法必须可以在没有令牌的情况下调用,并且我不能拆分接口,也不能添加另一个不安全的端点。 (=配置服务限制)
那么,我可以将我的绑定修改为基本上声明“使用 WIF 令牌是可选的”吗?或者换句话说:服务应该使用调用者的声明和身份,或者如果没有提供令牌,则使用某种匿名令牌。
我当前的绑定:
<microsoft.identityModel>
<service saveBootstrapTokens="true">
<audienceUris>
<add value="https://.../MyServiceCaller" />
</audienceUris>
<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true" issuer="https://.../MyFederationProviderHere" realm="https://.../MyServiceCaller" requireHttps="true" />
<cookieHandler requireSsl="true" />
</federatedAuthentication>
<applicationService>
<claimTypeRequired>
<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" />
</claimTypeRequired>
</applicationService>
<serviceCertificate>
<certificateReference x509FindType="FindByThumbprint" findValue="123123" />
</serviceCertificate>
<issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<add thumbprint="123123" name="My.Auth.FederationProvider" />
<add thumbprint="456456" name="My.Auth.FederationProvider" />
</trustedIssuers>
</issuerNameRegistry>
</service>
</microsoft.identityModel>
...
<ws2007FederationHttpBinding>
<binding name="Host_Ws2007FederationHttp_WithToken">
<security>
<message establishSecurityContext="false" issuedKeyType="BearerKey"
issuedTokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"
negotiateServiceCredential="false">
<tokenRequestParameters>
<trust:SecondaryParameters xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<trust:TokenType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</trust:TokenType>
<trust:KeyType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
</trust:SecondaryParameters>
</tokenRequestParameters>
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
【问题讨论】:
能否分享一下服务配置 其实我不能。该服务由配置服务动态创建(在 stocktraider 示例中发布)。 【参考方案1】:否 - 在 WCF 中,身份验证要求是针对每个端点的。您的 IsOnline 操作需要一个单独的端点。然后,您在此端点上使用允许匿名连接的绑定。
【讨论】:
我认为你是对的。我使用另一个 STS 解决了这个问题,该 STS 为我的 IsOnline 方法提供了一个具有有限优先权的令牌。谢谢。以上是关于使用 WIF 令牌保护的 WCF 服务需要公共方法的主要内容,如果未能解决你的问题,请参考以下文章
在 WCF/WIF 中,如何合并来自两个不同客户端的自定义 sts 令牌的声明
使用 ADFS2 作为 IP 使用 WIF 保护后端 WCF 服务
如何将(声明)安全令牌传递给启用 WIF 的 WCF 服务?
在使用 WIF/Geneva 的应用程序中处理使用 WCF 服务的凭据