.net - 在 .NET Core 中调用带有安全标头的 SOAP 端点
问题描述
.net core- 调用带有 wss 安全标头的肥皂服务
在我的 .net 核心类库项目中,我添加了对 WCF 服务的引用(使用 wsdl 文件),现在我在 Connected Services 下生成了引用类。我可以使用 BasicHttpBinding 调用 WCF 服务,但问题是服务器还需要一个安全元素以及 SOAP 标头
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ds:Signature Id="SIG-"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
</ds:SignedInfo>
<ds:SignatureValue>==gMg==</ds:SignatureValue>
<ds:KeyInfo Id="KI-">
</ds:KeyInfo>
</ds:Signature>
<wsu:Timestamp wsu:Id="TS-34A069E7A55FECD03D16098926271579">
</wsu:Timestamp>
</wsse:Security>
<wsa:Action>http://www.test.com/Namespace/test_action</wsa:Action>
<wsa:MessageID>uuid:XXX</wsa:MessageID>
</soapenv:Header>
</soapenv:Envelope>
所以基本上我希望 SOAP 消息将这种安全标记附加到标头。请参阅上面的示例 SOAP。
提前致谢 :-)
解决方案
所以问题是向 SOAP 请求添加安全标头。我发现,通过绑定中的配置,您也可以发送安全标头。您可能不需要任何额外的代码。
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ClientBehavior">
<clientCredentials>
<clientCertificate findValue="<certificate thumbprint here >" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint"/>
<serviceCertificate>
<authentication revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="BasicHttpBinding_IExampleService">
<security
defaultAlgorithmSuite="Default"
requireDerivedKeys="false"
messageProtectionOrder="SignBeforeEncrypt"
requireSignatureConfirmation="false"
securityHeaderLayout="Lax"
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
includeTimestamp="true"
>
<localClientSettings detectReplays="true" />
<localServiceSettings detectReplays="true" />
</security>
<textMessageEncoding messageVersion="Soap11" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:63454/ExampleService.svc"
binding="customBinding" bindingConfiguration="BasicHttpBinding_IExampleService"
contract="ServiceReference1.IExampleService" name="BasicHttpBinding_IExampleService" behaviorConfiguration="ClientBehavior" >
<identity>
<certificateReference findValue="<certificate thumbprint here >" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</identity>
</endpoint>
</client>
</system.serviceModel>
推荐阅读
- java - Swagger 基本授权不适用于 @Api 注释
- arrays - 循环遍历作为子数组的列表
- elm - Elm 和 VSCode:格式化程序弄乱了间距
- asp.net - asp.net 中继器不在浏览器中呈现
- android - Android Studio 看不到 setupWithNavController
- java - 如何使 if 语句更小并避免在 java 中出于相同原因使用太多循环
- makefile - 列出使用模式更改的文件并将它们保存在变量中
- python - 来自模板标签的错误:“str”对象没有属性“as_widget”
- angularjs - 在angularjs ui-select中显示十六进制颜色
- javascript - jQuery 看不到添加的文本