c# - 如何使用 WCF 在 WSSE 安全 header 中设置密码类型 "PasswordText"

标签 c# wcf wsse

我想要一个 wsse 安全 header ,其中密码类型设置为“PasswordText”,如以下 SOAP 片段所示:

<wsse:UsernameToken wsu:Id="UsernameToken-2">
   <wsse:UsernaWme>usrnm</wsse:Username>
   <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pwd</wsse:Password>
</wsse:UsernameToken>

但我得到的只是一个没有 Type 属性的简单密码标签。

<wsse:UsernameToken u:Id="UsernameToken-2">
  <wsse:Username>usrnm</wsse:Username>
  <wsse:Password>pwd</wsse:Password>
</wsse:UsernameToken>

在代码或 app.cfg 中指定它的正确方法是什么? 到目前为止,这是我的代码:

service.ClientCredentials.UserName.UserName = "usrnm";
service.ClientCredentials.UserName.Password = "pwd";

var securityElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
securityElement.AllowInsecureTransport = true;

var encodingElement = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8);
var transportElement = new HttpTransportBindingElement();

var binding = new CustomBinding(securityElement, encodingElement, transportElement);
service.Endpoint.Binding = binding;

最佳答案

也许这会帮助像我一样在搜索中找到它的其他人。我通过更改 MessageSecurityVersion 解决了这个问题。

在 app.config 自定义绑定(bind)中:

<security authenticationMode="UserNameOverTransport" 
   messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" />

在 C# 中:

var securityElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;

关于c# - 如何使用 WCF 在 WSSE 安全 header 中设置密码类型 "PasswordText",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31200908/

相关文章:

wcf - 为什么不能在 wcftestclient 中调用 WCF?

xml - WCF 服务,SOAP 或纯 XML 响应,如何?

c# - 无法将泛型列表作为参数发送到 WCF 方法

c# - 找不到与请求 URI 'Myurl' 匹配的 HTTP 资源 在 Controller 'controllername' 上找不到与请求匹配的操作

c# - SQL Server 日期时间接受 NULL

c# - 标签上的 "Invoke or BeginInvoke cannot be called on a control until"

c# - 使用 C# 的基于 WSSE 的服务的客户端

python - 如何使用zeep为签名添加时间戳?

java - 在java中使用wsdl、用户名和密码调用soap webservice

c# - 无法在 C# 中序列化数组对象