gpt4 book ai didi

c# - 使用 SoapUI 测试具有基本身份验证的 WCF

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:42 24 4
gpt4 key购买 nike

我是网络服务的新手。我想编写一个带有用户名和密码身份验证的简单 WCF。使用SoapUI进行测试时,如果安全模式设置为none(无基本认证),则可以调用成功。一旦安全模式设置为message(带基本认证),就无法返回正确的结果。它们都可以使用C#客户端成功调用。我在 StackOverflow 上应用了很多建议,但仍然无法获得正确的结果。

  • 在“Wss-密码类型”部分的 SoapUI 的“请求属性”中只需选择“密码文本”选项。
  • negotiateServiceCredential="true"
  • 勾选“将默认 WSA 添加到”
  • 在http设置中勾选“为传出结果添加认证信息”

是否需要做任何额外的设置,比如配置证书?我期待着您的帮助。

下面列出了设置的详细信息。

当设置安全模式为message时,返回结果为

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Sender</s:Value>
<s:Subcode>
<s:Value xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</s:Value>
</s:Subcode>
</s:Code>
<s:Reason>
<s:Text xml:lang="zh-HK">An error occurred when verifying security for the message.</s:Text>
</s:Reason>
</s:Fault>
</s:Body>
</s:Envelope>

SoapUI 日志:

调试:尝试 1 执行请求调试:发送请求:POST/ServiceHello.svc HTTP/1.1调试:接收响应:HTTP/1.1 500 内部服务器错误DEBUG:连接可以无限期地保持事件状态信息:在 3 毫秒(576 字节)内收到 [WSHttpBinding_IServiceHello.HelloWorld:Request 1] 的响应

安全模式的结果=无

 <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://tempuri.org/IServiceHello/HelloWorldResponse</a:Action>
</s:Header>
<s:Body>
<HelloWorldResponse xmlns="http://tempuri.org/">
<HelloWorldResult>Hello World</HelloWorldResult>
</HelloWorldResponse>
</s:Body>
</s:Envelope>

这是 web.config

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<services>
<service name="WCFTest.ServiceHello"
behaviorConfiguration="WCFTest_Behavior">
<endpoint
address=""
binding="wsHttpBinding"
contract="WCFTest.IServiceHello"
bindingConfiguration="WCFTest_Config">
</endpoint>

</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="WCFTest_Config">
<security mode="None">
<!—The only difference between two web service is the security mode, which is set to message in the authentication version -->
<message clientCredentialType="UserName" negotiateServiceCredential="false"
establishSecurityContext="false" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="WCFTest_Behavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="None"/>
</clientCertificate>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCFTest.App_Code.Authentication.CustomValidator,App_Code/Authentication"/>
<serviceCertificate
findValue="myCertificate"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>

最佳答案

查看您的应用程序配置,我做出以下假设:a) 您的 WCF 服务使用 .NET Framework 4.5 或更高版本。b) 该服务托管在 IIS 中,启用了 SSL 安全性。c) 您想使用 WsHttpBinding。d) 身份验证是自定义的。

因此,我给大家以下建议:

IIS 发布:

a) SSL 安全:启用需要 SSL 和客户端证书,将其设置为忽略。这就是您在 Web.config 中配置它的方式:

<clientCertificate>
<authentication certificateValidationMode = "None" />
</ clientCertificate>

b) 身份验证:启用“匿名身份验证”并禁用其他。

网络配置:

<wsHttpBinding>
   <binding name = "WCFTest_Config">
      <security mode = "TransportWithMessageCredential">
         <transport clientCredentialType = "None" proxyCredentialType = "None" realm = "" />
         <message clientCredentialType = "UserName" />
      </security>
   </binding>
</wsHttpBinding>

还有

<protocolMapping>
   <add binding = "wsHttpBinding" scheme = "https" />
</protocolMapping>

试试吧,祝你好运!

关于c# - 使用 SoapUI 测试具有基本身份验证的 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com