如何让WCF服务的WSDL说它需要基本身份验证?

时间:2010-01-08 09:48:36

标签: .net wcf authentication

我们在SiteMinder代理后面的IIS上托管了一个WCF服务(缺少一个更好的术语)。实质上,请求使用http基本身份验证进入https://public.domain.com/SOA/Service.svc的SiteMinder。 SiteMinder验证身份验证,将其剥离并向http://internal.domain/SOA/Service.svc发送请求,无需身份验证。

在查询服务WSDL时会出现两个问题:

  1. WSDL中的URL显示http:而不是https:
  2. WSDL没有提及要求基本身份验证
  3. 我已经能够通过实现IWsdlExportExtension来解决问题#1,该IWsdlExportExtension替换了ExportEndpoint中的url(方法。虽然我还没弄清楚如何解决问题#2。可以有人指出我正确的方向?

    谢谢!

2 个答案:

答案 0 :(得分:1)

由于在托管服务的地方没有进行身份验证,解决方案是手工制作WSDL文件,然后告诉WCF使用externalmetadatalocation引用它。

答案 1 :(得分:1)

我能够弄清楚这一点。我需要使用customBinding,并提供我自己的IPolicyExportExtension,将其作为IPolicyExportExtension.ExportPolicy()的实现:

void IPolicyExportExtension.ExportPolicy(MetadataExporter exporter, PolicyConversionContext context) {
   XmlElement elem = doc.CreateElement("http", "BasicAuthentication", "http://schemas.microsoft.com/ws/06/2004/policy/http");
   context.GetBindingAssertions().Add(elem);
}