**答案是肯定的。** WCF 本身不內置 OAuth 2.0 服務端實現,但通過擴展點(`ServiceAuthorizationManager`、自定義 `MessageInspector`、或集成第三方庫)可完整支持 OAuth 2.0 的授權碼模式、資源擁有者密碼模式等流程。
主流實現方案
方案一:使用成熟開源庫(推薦)
- IdentityServer4 / Duende IdentityServer: 雖然主要面向 ASP.NET Core,但可作為獨立授權服務器,WCF 客戶端通過驗證 Access Token(JWT)實現資源保護。
- ServiceStack.Auth: ServiceStack 框架內置完整的 OAuth 2.0 提供者與消費者支持,可托管在 WCF 兼容環境中。
參考:ServiceStack Authentication Wiki
- Thinktecture IdentityModel(舊): 早期 WCF 專用擴展庫,現已停止維護,不建議新項目使用。
方案二:自定義 WCF 擴展實現 Resource Server
若不想引入重型框架,可自行實現「資源服務器」角色:
- Token 驗證: 實現 `IDispatchMessageInspector`,在 `AfterReceiveRequest` 中從 Header 取出 `Bearer Token`,調用授權服務器的 Introspection Endpoint 或本地驗證 JWT 簽名/過期/受眾。
- 授權決策: 實現 `IAuthorizationPolicy` / `ServiceAuthorizationManager`,將 Token 中的 `scope`/`role` 映射為 WCF `ClaimSet`,供 `PrincipalPermissionAttribute` 或代碼中檢查。
- 錯誤處理: 驗證失敗時拋出 `FaultException` 並設置 HTTP 401 + `WWW-Authenticate: Bearer` Header。
關鍵提示
- WCF 通常作為 **Resource Server(資源服務器)**,而非 Authorization Server。建議將授權碼分發、刷新 Token 等複雜邏輯交給專業的 IdentityServer/Keycloak 等授權服務器。
- 傳輸**必須使用 HTTPS**,防止 Token 被竊聽。
- 若 WCF 運行在 .NET Framework 4.7.2+,可直接使用 `System.IdentityModel.Tokens.Jwt` 驗證 JWT。
綜上,WCF 完全能融入 OAuth 2.0 體系,關鍵在於選擇合適的集成方式。