接續前兩篇,本文詳細講解 WSE 3.0 策略配置工具實現 Web 服務安全,含工具介紹、配置流程、代碼實現與總結。
專案右鍵 → WSE 3.0 Settings,7 個分頁:
自動更新 Web.config:
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3..."/>
<webServices>
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3..."/>
</webServices>
生成:
<security>
<securityTokenManager>
<add type="MyUsernameTokenManager.MyUsernameTokenManager, UsernameTokenManagerClassLib" namespace="..." localName="UsernameToken"/>
</securityTokenManager>
</security>
客戶端認證四種模式:
訊息保護等級:
<policy name="ServerPolicy">
<usernameOverTransportSecurity />
<requireActionHeader />
</policy>
安全級別較低,易被攔截破解。
令牌 TTL 30 秒、診斷追蹤輸入輸出、MTOM 模式等,均自動生成對應配置節點。
[Microsoft.Web.Services3.Policy("ServerPolicy")]
public class Service : WebService {
[WebMethod]
public string HelloWorld() => "Hello Guys, Frank Xu Lei.is testing WSE3.0 Setting Policy";
}
var proxy = new ServiceWse();
var token = new UsernameToken("FrankXu", "123456789", PasswordOption.SendPlainText);
proxy.SetClientCredential(token);
proxy.SetPolicy("ClientPolicy"); // 關鍵:套用客戶端策略
string result = proxy.HelloWorld();
流程:客戶端按策略封裝 UsernameToken → SOAP Header 發送 → 服務端按策略解析驗證。
var assertion = new UsernameForCertificateAssertion();
assertion.X509TokenProvider = new X509TokenProvider(StoreLocation.CurrentUser, StoreName.AddressBook, "CN=WSE2QuickStartServer", X509FindType.FindBySubjectDistinguishedName);
assertion.Protection.Request.SignatureOptions = SignatureOptions.IncludeAddressing | SignatureOptions.IncludeTimestamp | SignatureOptions.IncludeSoapBody;
assertion.Protection.Request.EncryptBody = true;
策略工具讓聲明式安全配置極簡單;代碼方式支援更精細控制。調試錯誤集錦另見部落格系列。下節進入 MTOM 優化傳輸。本文附源碼。