在WCF服务中实现身份验证(非ssl)

时间:2017-06-14 04:46:28

标签: c# wcf ssl sap

我开发了一个使用basicHttp绑定的.NET WCF服务。此服务将在Intranet中的IIS中托管,并由非Windows SAP PO客户端使用。

此服务不会泄露任何敏感信息所以我不想花时间签名或加密邮件。但是,我也不希望任何知道URL的人访问该服务。所以需要某种形式的身份验证。

任何人都可以建议验证我的服务最简单的方法是什么?

更新:

感谢Keyur PATEL。我设法在IIS中按照安全模式设置为" TransportCredentialOnly"提供的链接来托管服务。

我在IIS中启用了基本身份验证

我的Windows客户端可以订阅服务但是在执行操作时会收到以下错误。

" HTTP请求未经授权使用客户端身份验证方案' Basic'。从服务器收到的身份验证标题是' Basic realm =" MY SERVER NAME"'。

服务器配置

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="CustomAuthentication">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" proxyCredentialType="Basic"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SecurityBehavior">
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SimpleService.UserNamePasswordAuthentification, App_Code/UserNameValidator"/>
          </serviceCredentials>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="SecurityBehavior" name="SimpleService.SimpleService">
        <endpoint address="SimpleService" binding="basicHttpBinding" bindingConfiguration="CustomAuthentication" contract="SimpleService.ISimpleService"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080"/>
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
  <system.web>
    <compilation debug="true"/>
  </system.web>
</configuration>

客户端配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ISimpleService">
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Basic" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://MYSERVERNAME:PORT/SimpleService.svc/SimpleService"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISimpleService"
                contract="SimpleServiceDEV.ISimpleService" name="BasicHttpBinding_ISimpleService" />
        </client>
    </system.serviceModel>
</configuration>

0 个答案:

没有答案