如何為 Captive Portals 設定微信 OAuth 驗證
本技術指南說明如何為 captive portals 設定微信 OAuth 驗證。內容詳細介紹了所需的平台註冊、OAuth 2.0 流程、權限範圍(scope)選擇,以及安全收集中國訪客第一方數據所需的網路強制執行機制。
收聽此指南
查看播客逐字稿

執行摘要
當中國訪客連線至您的 WiFi 時,若登入頁面僅提供電子郵件或 Facebook 選項,將會立即產生使用阻礙。微信(WeChat)擁有 13.8 億的月活躍用戶,將其設定為身分驗證提供商可有效消除此障礙。本指南將說明如何為 Captive Portal 實作微信 OAuth 2.0 驗證,詳細介紹必要的平台註冊、OAuth 流程,以及將成功登入轉換為網路存取權限所需的網路強制執行機制。我們涵蓋了企業級硬體的技術實作,以及 GDPR 和《個人信息保護法》(PIPL)下的合規要求。
技術架構
Captive Portal 會攔截來自未驗證裝置的 HTTP 流量,並將其重新導向至託管在 Portal 伺服器上的登入頁面。當您整合微信 OAuth 時,即是在此流程中插入了第三方身分驗證提供商。

其運作順序如下:
- 訪客連線至 SSID。
- 無線基地台(AP)或無線控制器偵測到無已驗證的會話,並將 HTTP 流量重新導向至 Captive Portal URL。
- 訪客選擇微信登入。
- Portal 伺服器將瀏覽器重新導向至微信的授權端點(
open.weixin.qq.com),並傳遞AppID、redirect_uri、response_type=code和scope。 - 微信處理驗證。若訪客在微信內建瀏覽器中使用
snsapi_base範圍,此過程將靜默完成。 - 微信帶著臨時授權碼重新導向回 Portal 的
redirect_uri。 - Portal 伺服器透過呼叫
api.weixin.qq.com/sns/oauth2/access_token,以該授權碼交換存取權杖(Access Token)。 - 微信傳回
access_token、refresh_token以及使用者的openid。
平台註冊要求
實作微信登入需要在正確的開發者平台上進行註冊。微信營運兩個不同的平台,選擇錯誤的平台會導致整合失敗。
微信公眾平台
對於在微信內建瀏覽器內為訪客提供服務的 Captive Portal,您需要在微信公眾平台(mp.weixin.qq.com)上申請服務號。訂閱號不具備所需的 OAuth 網頁授權權限。服務號同時支援 snsapi_base 和 snsapi_userinfo 範圍。
微信開放平台
對於從微信外部的標準行動瀏覽器(例如 Android 上的 Chrome 或 iOS 上的 Safari)存取的 Captive Portal,您需要一個在開放平台(open.weixin.qq.com)註冊的網站應用程式。這會使用 snsapi_login 權限範圍,並顯示一個 QR code 供使用者使用其微信應用程式進行掃描。
大多數企業部署都需要同時進行這兩種註冊,以覆蓋所有的存取方式。
權限範圍選擇與數據收集
權限範圍參數決定了微信返回給您入口網站伺服器的數據。此決定會同時影響使用者體驗摩擦與數據隱私合規性。

snsapi_base
此權限範圍僅返回 OpenID,這是您公眾號內該使用者的唯一識別碼。它不需要使用者同意提示,使驗證過程對使用者而言是無感的。這最適合已建立個人檔案的回訪訪客,或適合將「零摩擦」置於「收集新數據」之上的場域。
snsapi_userinfo
此權限範圍會返回 OpenID 以及使用者的微信暱稱、個人頭像、性別、語言設定和城市。它需要一個明確的同意畫面,這會增加操作摩擦。請在需要建立個人檔案的初次訪客註冊時使用此範圍,並搭配符合 GDPR 規範的同意層。
網路強制執行整合
取得 OAuth 權杖可證明身分,但並不會開啟網路。您必須使用標準協定將成功的驗證轉換為網路存取權限。
RADIUS 授權變更 (CoA)
在 IEEE 802.1X 和 RFC 3576 中定義的 RADIUS CoA 允許入口網站伺服器在 OAuth 成功後向網路控制器發送請求。然後,控制器會將裝置從未驗證的 VLAN 移動到訪客 VLAN。這是包括 Cisco Meraki、HPE Aruba、Ruckus 和 Juniper Mist 在內的企業級硬體的標準做法。
MAC 位址旁路
或者,入口網站伺服器將裝置的 MAC 位址註冊為已授權的用戶端,然後控制器予以放行。雖然實作上較為簡單,但安全性較低,因為 MAC 位址可能會被偽造。
Purple 的雲端重疊網路可自動執行此轉換,在微信 OAuth 完成後,向底層硬體(包括 Ubiquiti UniFi、Cambium、Extreme 和 Fortinet)發送適當的訊號。
合規性與安全性考量
GDPR 與 PIPL 協調一致
如果您服務歐洲訪客,GDPR 適用於透過微信 OAuth 收集的數據。如果您服務中國訪客,則適用中國的《個人信息保護法》(PIPL)。這兩個框架都需要處理的合法依據、明確的目的限制以及數據最小化。相比於 snsapi_userinfo,snsapi_base 權限範圍更容易符合數據最小化原則。
CSRF 防護
OAuth 請求中的 state 參數可防止跨站請求偽造。您必須產生一個加密隨機的 state 值,將其儲存在使用者工作階段中,並在微信重新導向返回時進行驗證。
重新導向 URI 驗證
微信會根據在平台上註冊的授權網域來驗證 redirect_uri。如果您的 Portal 伺服器使用不同的子網域、路徑或使用 HTTP 而非 HTTPS,OAuth 流程將會失敗並顯示錯誤 40029。
如需更多關於保護您網路安全的資訊,請參閱我們的 Enterprise WiFi Security: A Complete Guide for 2026 。
關鍵定義
snsapi_base
一種微信 OAuth 權限範圍,僅返回使用者的 OpenID,而不顯示授權提示。
用於 IT 團隊需要靜默驗證回訪訪客,以避免產生登入摩擦時。
snsapi_userinfo
一種微信 OAuth 權限範圍,會返回 OpenID 以及人口統計數據(暱稱、性別、城市),且需要使用者明確授權。
用於首次註冊,且行銷團隊需要建立訪客個人檔案時。
OpenID
特定微信公眾號內特定使用者的唯一識別碼。
在傳送門資料庫中用作主鍵,以追蹤訪客行為和回訪情況。
RADIUS CoA
授權變更(Change of Authorisation)。RFC 3576 中定義的一種機制,允許伺服器修改作用中工作階段的授權狀態。
由傳送門伺服器使用,在微信驗證成功後通知無線控制器授予網路存取權限。
PIPL
個人資訊保護法。中國全面的數據隱私法規。
在為使用微信登入的中國訪客設計同意流程時,必須與 GDPR 一併考慮。
AppID and AppSecret
微信提供的憑證,用於識別和驗證您的應用程式。
AppSecret 必須安全地保留在傳送門伺服器上,絕不能暴露在用戶端程式碼中。
State Parameter
在 OAuth 請求中傳遞並在返回時進行驗證的加密隨機字串。
對於防止 Captive Portal 上的跨站請求偽造(CSRF)攻擊至關重要。
MAC Address Bypass
一種透過授權裝置的硬體位址來授予網路存取權限的方法,而不需要進行 802.1X 驗證。
較簡單網路設定中 RADIUS CoA 的替代方案,但安全性較低。
範例
一家位於倫敦的奢華零售品牌希望為中國顧客提供微信登入服務。他們想收集人口統計數據以了解其客戶群,但同時擔心 GDPR 合規性以及 portal 頁面過高的流失率。
該零售商應在微信公眾平台註冊一個服務號。他們必須將 portal 設定為在首次連線時使用 snsapi_userinfo 權限範圍,以收集人口統計數據(暱稱、性別、城市)。為確保符合 GDPR,portal 頁面在跳轉至微信前,必須顯示清晰且需主動勾選的同意聲明,詳細說明收集哪些數據及其原因。對於再次到訪的顧客,portal 應偵測 MAC 地址並使用 snsapi_base 進行無感二次驗證,以減少摩擦。
某體育場使用 HPE Aruba 控制器部署了新的 WiFi 網路。他們設定了微信 OAuth,且 portal 已成功接收存取權杖(access token),但訪客的裝置仍停留在 captive portal 頁面,無法存取網際網路。
該整合缺乏網路強制執行機制。Portal 伺服器已向微信驗證了使用者身分,但尚未指示 HPE Aruba 控制器授予存取權限。必須將 portal 伺服器設定為向控制器傳送 RADIUS 授權變更(CoA)訊息,指示其將使用者的 MAC 地址從驗證前角色轉換為已驗證的訪客角色。
練習題
Q1. 您正在零售連鎖店部署 Captive Portal。測試顯示,在 iOS 上使用 Safari 開啟 Portal 的使用者在選擇微信登入時會收到錯誤,但從微信訊息連結內開啟 Portal 的使用者則能成功進行驗證。最可能的起因是什麼?
提示:請考慮微信內建瀏覽器與標準行動瀏覽器之間的差異。
查看標準答案
該實作可能完全依賴於在公眾平台註冊的服務號,這僅支援在微信內建瀏覽器中進行 OAuth。若要支援 iOS 上的 Safari,您還必須在微信開放平台註冊網站應用,並實作使用者代理(User Agent)偵測,以將 Safari 使用者引導至 QR code 流程。
Q2. 您的 Portal 伺服器記錄顯示,在進行 Access Token 交換期間,微信 API 頻繁傳回 40029「invalid code」錯誤。您應該首先檢查哪項設定?
提示:請思考微信如何驗證驗證請求的來源。
查看標準答案
您應該驗證 redirect_uri 設定。微信會嚴格根據在開發者主控台註冊的授權網域來驗證重新導向 URI。如果 Portal 使用不同的子網域,或者遺失了 HTTPS,微信將會拒絕該 code 交換。
Q3. 場地營運商希望收集訪客數據,但堅持登入流程必須零摩擦。他們要求您設定微信登入,以便在不顯示同意提示的情況下收集訪客的暱稱和城市。您該如何回應?
提示:請檢視不同 OAuth 權限範圍(Scope)的功能。
查看標準答案
您必須告知營運商這在技術上是不可能的。收集暱稱和城市等人口統計數據需要 snsapi_userinfo 權限範圍,這會強制觸發微信同意提示。若要實現零摩擦,您必須使用 snsapi_base,它會靜默運作,但僅傳回 OpenID。
繼續閱讀本系列
如何在 Starlink 上設定 Captive Portal:偏遠地區與海事場所指南
本指南詳細介紹如何繞過 Starlink 原生硬體,並使用企業級路由設備整合雲端管理的 Captive Portal。您將學習如何克服 CGNAT 限制、強制執行 VLAN 隔離、管理衛星頻寬限制,並確保符合法規規範。
Captive Portal 最佳做法:針對高轉換率與合規性的設計
本技術指南為 IT 經理、網路架構師和場域營運總監提供了部署 Captive Portal 的完整藍圖,在網路安全與高用戶轉換率之間取得平衡。內容涵蓋從 VLAN 區隔和 RADIUS 驗證,到符合 GDPR 規範的同意書設計與驗證方法選擇的完整架構。結合 Purple 於 2024 年在 80,000 多個場域和 4.4 億次登入的營運經驗,每項建議均基於真實的部署數據。
如何優化 Captive Portals 以實現最大化網路安全與使用者轉換率
本指南為企業級場域優化 Captive Portals 提供完整的技術藍圖,涵蓋網路分段架構、身分驗證方法選擇、符合 GDPR 規範的同意書設計以及轉換率優化。本書專為飯店、連鎖零售、體育場館和公共部門機構的 IT 經理、網路架構師及 CTO 撰寫,協助其在網路安全與第一方數據收集之間取得平衡。Purple 在全球超過 80,000 個場域營運 Captive Portal 基礎設施,並在 2024 年處理了 4.4 億次登入,本指南所提供的框架皆源自於這些實務營運經驗。