[.NET] SPA 安全整合 SignalR:以 PKCE 三階段換票與 CSP 聯防打造的安全防線

在 SPA 架構下,整合 ASP.NET Core SignalR 常面臨安全挑戰。由於瀏覽器的 WebSocket 握手階段無法自訂 Headers,開發者常被迫將 JWT 放入 Query String 傳遞,使 Token 暴露於 URL 中。此外,一旦 SPA 遭遇 XSS 漏洞,記憶體中的憑證仍有被竊取的風險。
本文將介紹如何以 PKCE (Proof Key for Code Exchange) 三階段換票機制安全換取 30 秒短效 Hub Token,並結合 CSP (Content Security Policy)
聯防作為最後防線,從後端配置一路講到前端原生 JavaScript 整合,為 SignalR Hub 提供全方位的安全防護。

...繼續閱讀 »

從 ASP.NET Core HybridCache 到瀏覽器端 HTTP Cache

續上篇 .NET 9 HybridCache 實戰,我們已介紹 Server\-Side 的快取架構(L1 記憶體快取、L2 分散式快取)。本篇將聚焦在 Client-Side 的快取機制(HTTP Cache):透過正確設定 HTTP 標頭,讓瀏覽器優先使用本地快取,降低伺服器負載並提升使用者體驗。

本篇會以實作程式碼示範各種 Cache-Control 指令的行為差異與適用情境。

...繼續閱讀 »

[.NET] 控制流程,不使用例外中斷流程控制的寫法

Exception 是微軟預設中斷流程的手段,要控制好流程就要好好的處理例外,也就是寫 try catch,這會讓流程控制的程式碼看起來很凌亂。於是我需要幾個原則

  1. 被流程所呼叫的方法都要處理好 Exception/錯誤(根據需求場景,例如:找不到某個資料) 並回傳 Failure 物件
  2. 若有攔截到 Exception,Failure 物件要裝載 Exception 訊息,並且給予該例外正確的錯誤訊息。
  3. 盡量在最外層紀錄 Failure 日誌,例如,Controller、Application Layer
  4. Web API 回傳值不可以包含 Exception

以上是我的原則,在你的團隊裡面應該也有自己的錯誤處理機制;接下來,我用 ASP.NET Core Web API 實際的演練一遍

...繼續閱讀 »

Web API 通過 Morcatko.AspNetCore.JsonMergePatch 實現更新部分資源

我曾經在端點使用 Dictionary<string,object> 型別,當調用端傳入 {"name":null} 時,移除 name key;傳入 {"name":"123"} 時,name 得的值等於 "123",這樣便能夠做到類似 Json Path 的功能,參考上篇,在不改變合約的情況之下,這次我想要改用 Morcatko.AspNetCore.JsonMergePatch 來實現更新部分資源並且讓端點的合約變成強型別。

...繼續閱讀 »

如何使用 Microsoft.FeatureManagement 實現 Feature Toggle

在軟體生命週期地演進的過程中,在不同的階段可能需要將某一些功能啟用或停用,這時候就可以選擇 Feature Toggle,微軟的 Microsoft.FeatureManagement 正好是選擇之一,除了基本的 Feature Toggle Flags 之外,也整合到 ASP.NET Core 的生命週期裡面,還有整合 Azure。下圖出自 針對目標受眾啟用分段推出功能 - Azure App Configuration | Microsoft Learn

條件式功能旗標
...繼續閱讀 »

ASP.NET Core 網站應用程式如何設定健康檢查

ASP.NET Core 提供了健康檢查的 Middleware,可以讓我們很輕鬆的知道應用程式目前的本身的狀態以及應用程式所依賴其他服務的狀態;也可以讓容器協調器進行重新啟動容器或是暫停服務,比如 K8s 的 Liveness、Readiness

令人驚喜的是 AspNetCore.HealthChecks.UI 提供 UI / Alert 讓監視系統變得更有效率了

...繼續閱讀 »