gpt4 book ai didi

wcf - 如何控制在 WCF SOAP 请求中签名的元素?

转载 作者:行者123 更新时间:2023-12-04 22:34:27 24 4
gpt4 key购买 nike

我正在为我无法控制的 Java Web 服务创建 WCF 客户端,但遇到了一个问题,如果 Timestamp header 元素已签名,该服务会返回 InvalidSecurity 错误。

我目前正在使用以下 SecurityBindingElement,但这会自动签署 Timestamp 元素。我怎样才能阻止这种行为?更一般地说,我如何控制哪些元素已签名,哪些未签名?

var version = MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
var sec = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement(version);
sec.EndpointSupportingTokenParameters.Signed.Add(new UserNameSecurityTokenParameters());
sec.MessageSecurityVersion = version;
sec.IncludeTimestamp = true;
sec.MessageProtectionOrder = MessageProtectionOrder.EncryptBeforeSign;

最佳答案

通常,您可以通过实现自定义端点行为来控制对哪些元素进行签名,并在 AddBindingParameters() 中执行如下操作:

ChannelProtectionRequirements requirements = bindingParameters.Find<ChannelProtectionRequirements>();
requirements.IncomingSignatureParts...

但是我看不到在这个 api 中删除元素的方法 - 只能添加一些。也许你可以通过私有(private)反射(reflection)来解决这个问题。

此外,我不确定这对安全性是否有效。我认为您唯一的方法是将“includeTimestamp”设置为 false,在这种情况下您不会向客户端发送时间戳。如果您必须发送时间戳(无符号),则仍将其保持为 false 并通过 custom encoder 自行创建时间戳.应该不难。如果消息已签名,请注意不要更改消息中的任何其他内容。

关于wcf - 如何控制在 WCF SOAP 请求中签名的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393541/

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