如何更改 wcf 客户端中的时间戳安全标头?

Posted

技术标签:

【中文标题】如何更改 wcf 客户端中的时间戳安全标头?【英文标题】:How to change the timestamp security header in a wcf client? 【发布时间】:2019-10-10 05:46:15 【问题描述】:

我正在尝试修改安全标头的默认到期时间,即 5 分钟到 1 分钟。 服务器的安全策略之一是时间戳(请求的日期),其生存时间为一分钟。

有什么想法吗?

我尝试创建自定义绑定但没有成功。

<s:Envelope xmlns:u=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <s:Header>
        <o:Security s:mustUnderstand=\"1\" xmlns:o=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">
            <u:Timestamp u:Id=\"uuid-6f772493-4b86-4695-b415-316a916119ec-2\">
                <u:Created>2019-05-23T12:14:26.920Z</u:Created>
                **<u:Expires>2019-05-23T12:19:26.920Z</u:Expires>**
            </u:Timestamp>

这是我们需要的:

<s:Envelope xmlns:u=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <s:Header>
        <o:Security s:mustUnderstand=\"1\" xmlns:o=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">
            <u:Timestamp u:Id=\"uuid-6f772493-4b86-4695-b415-316a916119ec-2\">
                <u:Created>2019-05-23T12:14:26.920Z</u:Created>
                **<u:Expires>2019-05-23T12:15:26.920Z</u:Expires>**
            </u:Timestamp>

【问题讨论】:

TTL : Time To Live 实际上是指 IP 在未转发以防止路由循环之前所经过的跳数。您可能正在尝试更改错误的属性。 docs.microsoft.com/en-us/dotnet/api/… 但您需要创建自定义绑定来设置它。 【参考方案1】:

解决方案是创建自定义绑定:

protected override SecurityBindingElement CreateMessageSecurity()

     SecurityBindingElement security;
     security.EnableUnsecuredResponse = true;
     security.IncludeTimestamp = true;
     security.LocalClientSettings.TimestampValidityDuration = TimeSpan.FromMinutes(1);
     security.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
     security.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256;
     return security;          

【讨论】:

以上是关于如何更改 wcf 客户端中的时间戳安全标头?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加终结点标头安全 WCF

时间戳如何帮助防止 Web 服务中的重放攻击

Firestore 安全规则:如果时间戳 (FieldValue.serverTimestamp) 等于现在

HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?

正确更改 Windows 上的文件时间戳?

WCF 错误 - 安全处理器无法在消息中找到安全标头