[Security] SPA 如何用 PKCE + CSP 防止 Token 被竊

SPA 做身分驗證,一定要面對一個問題:**Token 要存在哪?** Authorization Code Flow + PKCE(RFC 7636)是目前的標準做法,解決的是「授權碼在傳輸途中被攔截後,攻擊者拿去換 Token」的問題。搭配 CSP(Content Security Policy)從瀏覽器端限制腳本來源,這兩道防線合在一起,才算是比較完整的 SPA 安全架構。 這篇文章用 ASP.NET Core Web API 自己實作授權伺服器,從頭走完整個 PKCE 流程,包含帳密驗證、Session Cookie 持久化,以及受保護的 API 端點。

...繼續閱讀 »

Hermes Agent × OpenWebUI × ngrok 從零到外網可用的完整演練

最近在玩 NousResearch 推出的 Hermes Agent,覺得 CLI 用起來還是不夠舒服,想把對話介面換成 OpenWebUI,又想在手機上也能用,所以順便串了 ngrok 把服務開到外網。

這一篇把安裝、Gateway 設定、OpenWebUI 串接、Hermes 舊對話匯入、ngrok 對外曝光一次整理起來,以後重灌也可以照著做一遍。

...繼續閱讀 »

通過 AI Agent + Obsidian 建立個人知識庫:Karpathy 筆記術實戰

你是否曾讀過一篇文章覺得很重要,但兩週後卻想不起來在哪看過?或者辛苦存了書籤、截圖,一個月後打開卻不知從何看起?更常見的問題是,文章 A 和文章 B 提到了同一個概念,但因為存在不同地方,你根本沒發現它們的關聯。

最近 OpenAI 共同創辦人、前 Tesla AI 總監 Andrej Karpathy 在 X 上分享了解決這個問題的方法,在網路上引起廣大回響。他的作法很簡單:把文章丟給 AI,AI 讀完後自動整理成一個 Wiki 知識庫,包含總結、目錄以及相關概念的連結,全部以 Markdown 檔案的形式存在你的電腦裡。

這篇文章我想要演練「用 Claude Code 建立這套個人知識管理系統」,從環境建置到實際 ingest 文章,一步一步帶大家走過去。

...繼續閱讀 »

Obsidian 基本配置

在軟體工程的開發與日常知識管理中,工具的選擇與工作流的順暢度往往決定了生產力的高低。傳統雲端筆記在切換頁面時常有卡頓感,容易打斷工作心流,且資料受限於第三方伺服器。

Obsidian 憑藉著本地端獨立 Markdown (MD) 檔案的特性,不依賴雲端伺服器,不僅確保了資料安全,其純文字的架構更是與 AI 程式開發工具(如 Claude Code 或 Gemini CLI)完美結合的絕佳載體。本篇文章將紀錄如何建置 Obsidian 基礎環境,透過 GitHub 進行全自動雲端同步,並導入 AI 工具實踐「自動整理」的筆記工作流。

...繼續閱讀 »

透過 Graphify 建立專案知識庫

在使用 AI 輔助開發(如 Claude Code、Copilot、Codex)接手或分析大型專案時,若讓 AI 直接讀取大量檔案,不僅會耗費大量 Token,AI 也容易迷失在細節中。Graphify 橫空出世,落實了 Karpathy 的工作流程,它是一款強大的擴充工具,能將專案內的程式碼、文件、圖片甚至影音,轉換為「可查詢的知識圖譜(Knowledge Graph)」。它能引導 AI 優先閱讀摘要報告,快速掌握系統架構與設計理念,這是我一直想要的阿。

...繼續閱讀 »

[ASP.NET] 用 HybridCache + Cookie 取代 Session,解決 Request 排隊與快取擊穿問題

ASP.NET Framework 的 Session 預設使用排他鎖(Mutex),同一個使用者的 Request 會排隊等待,嚴重影響效能。而 ASP.NET Core 的 Session 雖然不會排隊,但底層是 IDistributedCache,不支援 HybridCache,每次存取都直接打 Redis,沒有 L1 記憶體快取,高流量時有快取擊穿的風險。

這篇想要演練的是用 HybridCache + Cookie 實作一個 SessionCacheProvider,讓開發者用起來跟原本的 Session["key"] 幾乎一樣,同時支援 ASP.NET Framework 4.8 和 ASP.NET Core (.NET 10)。

...繼續閱讀 »

升級版 Idempotency Key:用 Redis 實現分散式冪等保護

上一篇 用 IDistributedCache + MemoryCache 做了一個簡單版本的冪等,適合單節點演練。但在多 Pod / Container 部署的環境下,MemoryCache 各自獨立,不同 Pod 看不到彼此的快取,冪等保護會直接失效。

這篇換用 Redis 來實現分散式冪等,目標是能跑在 Kubernetes / Docker Swarm 這類環境。

...繼續閱讀 »

ASP.NET Core 10 微服務可觀測性實戰 - OpenTelemetry + Serilog + Jaeger + Aspire Dashboard

在微服務架構中,一個使用者請求可能跨越多個服務,當問題發生時,如何追蹤這個請求到底經過了哪些服務?每個服務做了什麼事?花了多少時間?這就是「可觀測性(Observability)」要解決的問題。

本篇文章將介紹如何在 ASP.NET Core 10 微服務中整合 OpenTelemetry、Serilog、Jaeger 與 Aspire Dashboard,建立完整的分散式追蹤與結構化日誌方案。

...繼續閱讀 »

Azure App Service 搭配 GitHub Actions 部署 ASP.NET Core Web API

Azure App Service 是微軟提供的全託管式 Web 應用程式平台,讓開發者能專注於程式開發,不需要擔心基礎架構的管理。搭配 GitHub Actions,可以實現完全自動化的持續部署流程。這篇文章會介紹如何使用 Azure App Service 部署和管理 Web 應用程式,以及透過 GitHub Actions 實現 CI/CD 自動部署。

...繼續閱讀 »