wcf通过反向代理进行基本身份验证

时间:2012-08-13 16:06:28

标签: wcf authentication ssl basic-authentication reverse-proxy

我有一个Web服务,通​​过反向代理使用ssl进行基本身份验证。我已经花了很长时间才弄清楚如何使这个工作,但我仍然无法让它完全发挥作用。

如果您在浏览器https://domain.com/service.svc中输入网址,则会询问凭据,如果正确,则会显示该服务的概述页面。 所以这似乎没问题。

但是当我尝试将服务添加到Visual Studio 2010时,我收到以下错误:

  

元数据包含无法解析的引用:   无法识别文档格式(内容类型为'text / html; charset = utf-8')。   元数据包含无法解析的引用:'https://domain.com/service.svc'。   HTTP请求未经授权,客户端身份验证方案为“匿名”。从服务器收到的身份验证标头是“Basic realm = NTLM”。   远程服务器返回错误:(401)未经授权。   如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

这是我的web.config

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="MyBinding">
                <!--<httpsTransport authenticationScheme="Basic"/>-->
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="None" proxyCredentialType="Basic" realm="" />                      
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>

    <services>
        <service name="WcfService1.PortalService" behaviorConfiguration="NorthwindBehavior">
            <host>
                <baseAddresses>
                    <add baseAddress="https://domain.com/" />
                </baseAddresses>
            </host>             
            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="WcfService1.IPortalService">
                <!--<identity>
                    <servicePrincipalName value=""/>
                </identity>-->
            </endpoint>
            <!--<endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="MyBinding" name="mex" contract="WcfService1.IPortalService"></endpoint>-->
        </service>
    </services>

    <serviceHostingEnvironment>
        <baseAddressPrefixFilters>
            <add prefix="https://domain.com/"/>
        </baseAddressPrefixFilters>

    </serviceHostingEnvironment>

    <!--<extensions>
        <bindingElementExtensions>
            <add name="httpsViaProxyTransport" type="WcfService1.HttpsViaProxyTransportElement, WcfService1"/>
        </bindingElementExtensions>
    </extensions>
      <bindings>
        <customBinding>
            <binding name="UserNamePasswordSecured">
                <textMessageEncoding />
                <security authenticationMode="UserNameOverTransport" />
                <httpsViaProxyTransport />
            </binding>
        </customBinding>
    </bindings>-->      

    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/></serviceCredentials>

            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="SampleEndpointBehavior">
                <!--<wsdlExtensions location="http://domain.com/PortalService.svc" singleFile="true"/> -->
            </behavior>
        </endpointBehaviors>
    </behaviors>

</system.serviceModel>

我尝试过很多内容,比如关注这篇文章:http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/但不是很成功。

我还尝试将网站绑定添加到http,因为wsdl正在生成服务器名称而不是域名,所以也许在那一端也有问题......

所以希望有人可以给我一些指示!

请注意,web.config文件中有一些“垃圾”,因为尝试了数百万种不同的设置...

0 个答案:

没有答案