Come configurare l'autenticazione WeChat OAuth per i Captive Portal
Questa guida tecnica spiega come configurare l'autenticazione WeChat OAuth per i captive portal. Dettaglia le registrazioni necessarie sulla piattaforma, il flusso OAuth 2.0, la selezione dello scope e i meccanismi di applicazione di rete necessari per acquisire in modo sicuro i dati di prima parte dei visitatori cinesi.
Ascolta questa guida
Visualizza trascrizione del podcast

执行摘要
当中国访客连接到您的 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 。
Definizioni chiave
snsapi_base
Uno scope OAuth di WeChat che restituisce solo l'OpenID dell'utente senza mostrare una richiesta di consenso.
Utilizzato quando i team IT devono autenticare silenziosamente i visitatori di ritorno senza causare attriti al login.
snsapi_userinfo
Uno scope OAuth di WeChat che restituisce l'OpenID insieme ai dati demografici (soprannome, genere, città) e richiede il consenso esplicito dell'utente.
Utilizzato durante la prima registrazione quando i team di marketing devono creare un profilo del visitatore.
OpenID
Un identificatore univoco per un utente specifico all'interno di uno specifico account ufficiale WeChat.
Utilizzato come chiave primaria nel database del Captive Portal per tracciare il comportamento dei visitatori e le visite di ritorno.
RADIUS CoA
Change of Authorisation. Un meccanismo definito nella RFC 3576 che consente a un server di modificare lo stato di autorizzazione di una sessione attiva.
Utilizzato dal server del portale per indicare al controller wireless di concedere l'accesso alla rete dopo una corretta autenticazione WeChat.
PIPL
Personal Information Protection Law. La normativa globale sulla privacy dei dati in Cina.
Deve essere preso in considerazione insieme al GDPR quando si progetta il flusso di consenso per i visitatori cinesi che utilizzano il login WeChat.
AppID and AppSecret
Le credenziali fornite da WeChat per identificare e autenticare la tua applicazione.
L'AppSecret deve rimanere protetto sul server del portale e non deve mai essere esposto nel codice lato client.
State Parameter
Una stringa crittograficamente casuale passata nella richiesta OAuth e convalidata al momento del ritorno.
Essenziale per prevenire attacchi di tipo Cross-Site Request Forgery (CSRF) sul Captive Portal.
MAC Address Bypass
Un metodo per concedere l'accesso alla rete autorizzando l'indirizzo hardware del dispositivo anziché richiedere l'autenticazione 802.1X.
Un'alternativa a RADIUS CoA per configurazioni di rete più semplici, sebbene meno sicura.
Esempi pratici
Un marchio di vendita al dettaglio di lusso a Londra desidera offrire l'accesso tramite WeChat per gli acquirenti cinesi. Desidera raccogliere dati demografici per comprendere la propria base clienti, ma teme la conformità al GDPR e gli elevati tassi di abbandono sul portale.
Il rivenditore deve registrare un Service Account sulla WeChat Official Accounts Platform. Deve configurare il portale per utilizzare lo scope snsapi_userinfo per le prime connessioni al fine di raccogliere dati demografici (nickname, sesso, città). Per garantire la conformità al GDPR, la pagina del portale deve mostrare un consenso esplicito e consapevole prima del reindirizzamento a WeChat, spiegando esattamente quali dati vengono raccolti e perché. Per gli acquirenti che ritornano, il portale deve rilevare l'indirizzo MAC e utilizzare snsapi_base per una riautenticazione silenziosa, riducendo al minimo gli ostacoli.
Uno stadio distribuisce una nuova rete WiFi utilizzando controller HPE Aruba. Ha configurato WeChat OAuth e il portale riceve correttamente il token di accesso, ma il dispositivo del visitatore rimane sulla pagina del captive portal e non può accedere a Internet.
L'integrazione è priva di un meccanismo di applicazione di rete. Il server del portale ha verificato l'identità dell'utente con WeChat, ma non ha istruito il controller HPE Aruba a concedere l'accesso. Il server del portale deve essere configurato per inviare un messaggio RADIUS Change of Authorisation (CoA) al controller, istruendolo a trasferire l'indirizzo MAC dell'utente dal ruolo di pre-autenticazione al ruolo di ospite autenticato.
Domande di esercitazione
Q1. Stai distribuendo un captive portal in una catena di negozi. I test mostrano che gli utenti che aprono il portale in Safari su iOS ricevono un errore quando selezionano il login con WeChat, mentre gli utenti che aprono il portale da un link all'interno di un messaggio WeChat si autenticano con successo. Qual è la causa probabile?
Suggerimento: Considera la differenza tra il browser in-app di WeChat e i browser mobili standard.
Visualizza risposta modello
L'implementazione si affida probabilmente solo a un Service Account registrato sulla Official Accounts Platform, che supporta l'OAuth solo all'interno del browser in-app di WeChat. Per supportare Safari su iOS, è necessario registrare anche una Website Application sulla WeChat Open Platform e implementare il rilevamento dello user agent per indirizzare gli utenti di Safari verso il flusso del codice QR.
Q2. I log del server del tuo portale mostrano frequenti errori 40029 'invalid code' restituiti dall'API di WeChat durante lo scambio dell'access token. Quale configurazione dovresti verificare per prima?
Suggerimento: Pensa a come WeChat convalida l'origine della richiesta di autenticazione.
Visualizza risposta modello
È necessario verificare la configurazione del redirect_uri. WeChat convalida rigorosamente l'URI di reindirizzamento rispetto al dominio autorizzato registrato nella console sviluppatore. Se il portale utilizza un sottodominio diverso o se non utilizza HTTPS, WeChat rifiuterà lo scambio del codice.
Q3. Il gestore di una location desidera raccogliere i dati dei visitatori ma insiste per non avere alcun attrito durante il processo di login. Ti chiede di configurare il login di WeChat per raccogliere il nickname e la città del visitatore senza mostrare una richiesta di consenso. Come rispondi?
Suggerimento: Esamina le funzionalità dei diversi scope OAuth.
Visualizza risposta modello
Devi informare il gestore che questo è tecnicamente impossibile. La raccolta di dati demografici come il nickname e la città richiede lo scope snsapi_userinfo, che attiva obbligatoriamente una richiesta di consenso di WeChat. Per ottenere un attrito zero, è necessario utilizzare snsapi_base, che opera in modo invisibile ma restituisce solo l'OpenID.
Continua a leggere questa serie
Progettazione di Captive Portal B2B: Raccolta dei Dati del Nome Registrato e dell'Azienda
Questa guida fornisce ai responsabili IT e ai gestori di sedi un framework tecnico indipendente dal fornitore per la progettazione di Captive Portal B2B. Dettaglia come strutturare i campi di registrazione per acquisire il nome registrato e i dati aziendali, garantendo tassi di completamento elevati pur mantenendo la conformità al GDPR e creando un'intelligence a livello di account.
Architettura Captive Portal: sicurezza, reindirizzamento e best practice
Un riferimento tecnico definitivo sull'architettura enterprise del captive portal. Questa guida analizza l'isolamento della rete, il reindirizzamento DNS, l'autenticazione RADIUS e la conformità della sicurezza per i responsabili IT che implementano reti WiFi ospiti sicure e ricche di dati.
Ottimizzazione dei Captive Portals B2B: Acquisizione di Nomi Aziendali e Dati Professionali
Questa guida spiega come i manager IT, gli architetti di rete e i direttori delle operazioni delle strutture possono configurare i Captive Portals B2B per acquisire dati professionali (nomi aziendali, ruoli lavorativi e indirizzi email aziendali) al momento dell'accesso al WiFi. Copre l'intera architettura tecnica, dall'isolamento delle VLAN e l'autenticazione RADIUS fino all'integrazione CRM con Salesforce e HubSpot, con conformità GDPR e CCPA integrata. Le strutture che implementano correttamente questa soluzione trasformano la propria rete WiFi per gli ospiti in un motore di dati di prima parte e in un sistema automatizzato di lead generation.