场景:我正在编写一个WCF客户端来访问Java / Metro Web服务,该服务需要通过从STS(也是Java / Metro)获得的令牌进行身份验证。服务的WSDL中的相关策略片段是:
<sp:IssuedToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<sp:Issuer>
<wsa:Address>...</wsa:Address>
<Metadata xmlns="http://www.w3.org/2005/08/addressing">
<Metadata xmlns="http://schemas.xmlsoap.org/ws/2004/09/mex">
<MetadataSection>
<MetadataReference>
<Address xmlns="http://www.w3.org/2005/08/addressing">...</Address>
</MetadataReference>
</MetadataSection>
</Metadata>
</Metadata>
</sp:Issuer>
<t:Claims Dialect="http://schemas.xmlsoap.org/ws/2005/05/identity">
<ClaimType xmlns="http://schemas.xmlsoap.org/ws/2005/05/identity" Optional="false" Uri="..."/>
<ClaimType xmlns="http://schemas.xmlsoap.org/ws/2005/05/identity" Optional="false" Uri="..."/>
</t:Claims>
<sp:RequestSecurityTokenTemplate>
<t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey</t:KeyType>
<t:KeySize>256</t:KeySize>
</sp:RequestSecurityTokenTemplate>
<wsp:Policy>
<sp:RequireDerivedKeys/>
<sp:RequireInternalReference/>
</wsp:Policy>
</sp:IssuedToken>
注意<Claims>
部分外部 <RequestSecurityTokenTemplate>
,如WS-SecurityPolicy 1.2中定义的那样(这已从放置<Claims>
的先前版本更改内)。
当这样放置时,svcutil
完全忽略<Claims>
。但是,当放置在RST模板中时,它们将被复制到生成的配置中:
<binding ...>
<security ...>
<issuedTokenParameters ...>
<additionalRequestParameters>
<!-- The RST template is copied here -->
</additionalRequestParameters>
...
</issuedTokenParameters>
</security>
...
</binding>
<> WCF声称(没有双关语)支持WS-SecurityPolicy 1.2 ,所以我想知道 - 这是一个设计错误吗?恕我直言,政策中的声明应始终出现在绑定配置的<additionalRequestParameters>
中。
答案 0 :(得分:0)
Microsoft支持向我确认这是.NET 4.0中的一个错误,并计划在下一个版本中修复。