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

执行摘要
当中国访客连接到您的 WiFi 时,如果登录页面仅提供电子邮件或 Facebook 登录,会立即产生使用阻碍。微信拥有 13.8 亿月活跃用户,将其配置为身份提供商可以消除这一障碍。本指南将阐述如何为 Captive Portal 实现微信 OAuth 2.0 认证,详细介绍必要的平台注册、OAuth 流程以及将成功登录转化为网络访问所需的网络强制执行机制。我们将涵盖企业级硬件的技术实现,以及 GDPR 和《个人信息保护法》(PIPL)下的合规要求。
技术架构
Captive Portal 会拦截来自未认证设备的 HTTP 流量,并将其重定向到托管在门户服务器上的登录页面。当您集成微信 OAuth 时,即是在此流程中插入了一个第三方身份提供商。

具体交互步骤如下:
- 访客连接到 SSID。
- 无线接入点(AP)或无线控制器检测到缺乏已认证的会话,并将 HTTP 流量重定向到 Captive Portal URL。
- 访客选择微信登录。
- 门户服务器将浏览器重定向到微信的授权端点(
open.weixin.qq.com),并传递AppID、redirect_uri、response_type=code和scope。 - 微信处理身份验证。如果访客在微信内置浏览器中使用
snsapi_base作用域,此过程将静默进行。 - 微信携带临时授权码重定向回门户的
redirect_uri。 - 门户服务器通过调用
api.weixin.qq.com/sns/oauth2/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 作用域,并呈现一个供用户使用其微信应用扫描的二维码。
大多数企业部署都需要进行这两种注册,以覆盖所有访问方式。
作用域选择与数据收集
作用域参数决定了微信返回给您门户服务器的数据。这一决定会同时影响用户摩擦和数据隐私合规性。

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。如果您的门户服务器使用不同的子域名、路径或使用 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。
繼續閱讀本系列
設計 B2B Captive Portals:收集註冊姓名與公司資料
本指南為 IT 經理與場域營運商提供了一個與廠商無關的技術框架,用於設計 B2B captive portals。指南詳細說明了如何規劃註冊欄位以擷取註冊姓名和公司資料,在確保高填答率的同時,維持 GDPR 合規性並建立企業帳戶級別的情報。
Captive Portal 架構:安全性、重新導向與最佳實踐
企業級 Captive Portal 架構的權威技術指南。本指南為部署安全且富含數據的訪客 WiFi 網絡的 IT 決策者,深入解析網路隔離、DNS 重新導向、RADIUS 驗證與安全合規性。
優化 B2B Captive Portals:擷取公司名稱與專業數據
本指南說明 IT 經理、網路架構師和場所營運總監如何設定 B2B captive portals,以在登入 WiFi 時擷取專業數據(公司名稱、職稱和企業電子郵件地址)。內容涵蓋從 VLAN 隔離、RADIUS 驗證到與 Salesforce 和 HubSpot 的 CRM 整合等完整技術架構,並內建 GDPR 與 CCPA 合規性。正確部署此系統的場所能將其訪客 WiFi 網路轉化為第一方數據引擎和自動化潛在客戶開發系統。