首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 客戶端無法存取服務:時間不同步導致安全權杖驗證失敗

     編輯:關於.NET

現象描述

WCF 客戶端呼叫服務時拋出 MessageSecurityException:

System.ServiceModel.FaultException: 訊息中至少有一個安全權杖無法驗證。

內部例外堆疊指向 SecuritySessionSecurityTokenProvider、SecurityChannelFactory 等安全通道元件。

根本原因

客戶端與服務端系統時間差異超過 5 分鐘。WCF 安全對話(WS-SecureConversation)依賴時間戳記防重放攻擊,預設允許誤差 5 分鐘。時間不同步導致權杖時間戳驗證失敗。

解決方案

  1. 強制時間同步:客戶端啟動時與網域控制器或 NTP 伺服器同步時間。
  2. 命令列同步(需管理員權限):
    net time \\ServerIP /set /yes
    

    缺點:需開放 RPC/網路存取,可能降低伺服器安全性。

  3. 程式碼同步(推薦):呼叫 Windows API NetRemoteTOD 或 WMI Win32_LocalTime 取得伺服器時間並調整本地時間(需 SeSystemtimePrivilege)。
  4. 調大容差(不推薦):修改繫結配置 maxClockSkew(預設 5 分鐘),但會削弱安全性。

最佳實務

  • 生產環境部署群組原則強制所有機器同步至同一 NTP 來源。
  • 客戶端啟動檢查時間差,超標提示使用者或自動同步(需提權)。
  • 記錄時間同步事件,便於審計與問題追蹤。

結語

時間同步是 WCF 安全通訊的基石。90% 的「安全權杖驗證失敗」皆源於時間偏移。建立統一時間源、自動化同步機制,可從根源消除此類故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved