The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

ASP.NET Core 網站如何整合 Google 的 reCAPTCHA Enterprise 功能

我們公司多奇數位創意的官網去年底全新改版上線,網站上幾乎每頁都有聯絡多奇表單,並透過 AJAX 傳送到後端 API 負責記錄並送出郵件到我們公司的服務信箱,但網站上線一個月以來,已經收到超過 100 條垃圾訊息。因此,我打算將表單加入 Google Cloud Platform (GCP) 的 reCAPTCHA Enterprise 服務,減少收到垃圾訊息的機會,不過我發現 GCP 的文件幾乎找不到任何一份完整的 C# 範例程式,連 ChatGPT 都問不出正確結果。這篇文章我來分享一下完整的開發流程!

... 繼續閱讀 ...

如何正確地替 Azure Active Directory 使用者啟用多因素驗證 (MFA)

我們上周有同事帳號被駭客入侵,在 30 分鐘內被建立了上百台虛擬機器(VM),還好他有設定消費限制,所以他的訂用帳戶(Subscription)一下子就被停用了,然而我到了隔天深夜才收到訂用帳戶停用的通知,如果沒設定消費限制的話,那真的就慘了!同事覺得納悶的點是,他明明有設定多因素驗證 (MFA) (Multi-Factor Authentication) 驗證方法(Authentication methods),怎麼駭客還可以從烏茲別克(Uzbekistan)用他的帳號密碼登入 Azure Portal 呢?這篇文章我就來說說我這兩天對 Microsoft 365 / Azure AD 在 MFA 的研究心得,超重要!🔥

... 繼續閱讀 ...

如何使用 OpenSSL 建立一張含有 Certificate Revocation List (CRL) 的憑證

最近因為公司在建立 ISO 27001 資訊安全管理系統,在文件管理部分就會想說要有一個高強度且具備不可否認性的數位簽章(Digital Signature)。建立一組公司用的 CA 憑證並透過這張 CA 憑證簽發給員工使用的數位憑證其實很簡單,但之前一直沒機會研究如何手工打造 CRL 憑證撤銷清單,今天研究了一下,終於可以自行簽發 CRL 憑證了。

... 繼續閱讀 ...

使用 appsecret_proof 增強從伺服器呼叫 Facebook Graph API 的安全性

我上周在 精通 OAuth 2.0 授權框架 課堂上示範 Facebook 的 OAuth 2.0 如何進行實作,結果過程中不小心啟用一個進階設定中的需要應用程式密鑰(Require app secret)選項,結果導致我在拿到 Access Token 之後竟然無法成功呼叫任何 Graph API。在我詳細研究之後,發現這個選項確實可以很好的增強 Access Token 使用的安全性,這篇文章我將來說明這個選項的來龍去脈,讓大家知道這個選項的確切用法。

... 繼續閱讀 ...

如何使用 OpenSSL 工具產製 CSR 憑證要求檔並成功申請正式 TLS 憑證

我們公司有經銷代理 TWCA 網站伺服器憑證,每隔一段時間都會有一些死忠的客戶跟我們定期續約購買,但這個過程很多人沒有經驗,經常搞不清楚該如何申請。如果你是開發人員,透過 mkcert 建立自簽憑證完全沒有難度,但是若要申請一個正式憑證就不是很多人能清楚步驟了。這篇文章我打算來解說一個完整的憑證申請流程,讓每個人都可以輕鬆掌握。

... 繼續閱讀 ...

使用 GnuPG 確保傳輸重要檔案或文件的過程能確保機密性與完整性

當我們要進行機密文件傳輸時,可能會面臨許多不同的傳輸方式,但是過程中必須確保資訊安全,因此你就會需要考量到許多因素。這篇文章我打算分享如何利用 GPG 工具對檔案進行簽章加密,檔案無論透過任何方式傳送給對方,都只有明確指定的對象可以開啟檔案,藉此達到資訊安全的中的機密性(Confidentiality)與完整性(Integrity)要求。

... 繼續閱讀 ...

如何在現有 ASP.NET Core 網站加入 Azure AD 的 OpenId Connect 登入

我們公司採用 Microsoft 365 辦公協作環境,這也意味著背後一定使用了 Azure AD 目錄服務,因此我們可以直接拿 Azure AD 作為公司的 OAuth 2.0 + OpenId Connect (OIDC) 認證與授權平台,因此開發公司內部應用程式就變的非常容易。這篇文章我將說明要將一個 ASP.NET Core 網站加入 Azure AD 的身份驗證流程,以及使用時的注意事項。

... 繼續閱讀 ...

如何將一個 ASP.NET Core 網站快速加入 LINE Login 功能 (OpenID Connect)

前幾天原本想用 ASP.NET Core 寫一個最簡單的 LINE Login 範例程式出來,結果想不到這麼簡單的功能,卡關了兩天才找出解決之道。如果單純的透過 OAuth 2.0 授權流程來取得 Access Token 與 ID Token 其實還蠻簡單的。但是若希望可以做到 OpenID Connect 流程中自動透過 JWK (RFC 7517: JSON Web Key) 來驗證 Token 的有效性,這時可以直接使用 ASP.NET Core 內建的 Microsoft.AspNetCore.Authentication.OpenIdConnect 套件來完成。不過當方便的套件遇到特殊的實作時,那麼就是一場災難啦。這篇文章我打算來說說這次的踩雷之旅!

... 繼續閱讀 ...

資訊安全筆記:盤點 Azure 訂用帳戶與角色指派的方法

在 Azure 所有 使用者 (User) 與 服務 (Service) 都代表著一個 主體 (Principal),而 Azure 的 RBAC (以角色為主的存取控制) 主要就是針對 主體 (Principal) 來進行角色指派 (授權),因此我們可以對 使用者主體 (User Principal) 或 服務主體 (Service Principal) 設定在不同資源所擁有的角色。本篇文章我打算來分享幾個方法,教你如何在特定 訂用帳戶 (Subscription) 下查出有哪些主體被設定了哪些角色,以及特定主體已經被授權到了哪些訂用帳戶哪些資源哪些角色,藉此用來盤點是否有不當授權的狀況。

... 繼續閱讀 ...