Saltar para o conteúdo principal

Como Configurar a Autenticação WeChat OAuth para Captive Portals

Este guia técnico explica como configurar a autenticação WeChat OAuth para captive portals. Detalha os registos de plataforma necessários, o fluxo OAuth 2.0, a seleção de âmbito (scope) e os mecanismos de aplicação de rede necessários para recolher dados primários (first-party) de visitantes chineses de forma segura.

📖 4 min de leitura📝 815 palavras🔧 2 exemplos práticos3 perguntas de prática📚 8 definições principais

Ouça este guia

Ver transcrição do podcast
COMO CONFIGURAR A AUTENTICAÇÃO OAUTH DO WECHAT PARA CAPTIVE PORTALS Uma Apresentação Técnica da Purple - Aproximadamente 10 Minutos --- INTRODUÇÃO E ENQUADRAMENTO (aproximadamente 1 minuto) Bem-vindo. Se é responsável pelo WiFi de convidados num hotel, cadeia de retalho, estádio ou centro de conferências que serve visitantes chineses, esta apresentação é para si. O WeChat tem 1,38 mil milhões de utilizadores ativos mensais, de acordo com os dados de 2024 da Tencent. A esmagadora maioria está na China, mas a plataforma tem também uma pegada internacional significativa - quatro milhões de utilizadores nos Estados Unidos, 12 milhões na Malásia e números crescentes em todo o Sudeste Asiático, Europa e Médio Oriente. Quando um convidado chinês se liga ao seu WiFi e vê uma página de login apenas com e-mail, Facebook ou um código de voucher, enfrenta uma fricção imediata. Pode não ter um endereço de e-mail local configurado nesse dispositivo. Quase de certeza que tem o WeChat. Portanto, a questão não é se deve oferecer o login do WeChat - é como configurá-lo corretamente, de forma segura e de modo a gerar dados primários (first-party data) que possa realmente utilizar. É isso que vamos abordar hoje. Vamos percorrer o fluxo OAuth 2.0, os dois registos de plataforma de que necessita, a decisão de âmbito (scope) que determina quais os dados que recolhe, o mecanismo de aplicação do lado da rede e as considerações de conformidade que importam em 2026. --- MERGULHO TÉCNICO PROFUNDO (aproximadamente 5 minutos) Comecemos pela arquitetura. Um Captive Portal intercetará o tráfego HTTP de um dispositivo não autenticado e redireciona-o para uma página de login. Essa página de login está alojada num servidor de portal - localmente ou na nuvem. Quando adiciona o WeChat OAuth, está a inserir um fornecedor de identidade de terceiros nesse fluxo. Eis a sequência. O convidado liga-se ao seu SSID. O ponto de acesso ou controlador sem fios deteta que o dispositivo não tem sessão autenticada e redireciona todo o tráfego HTTP para o URL do seu Captive Portal. A página do portal é carregada e apresenta as opções de login - incluindo o WeChat. O convidado toca no login do WeChat. O seu servidor de portal redireciona o navegador para o endpoint de autorização do WeChat em open.weixin.qq.com, transmitindo o seu AppID, o URI de redirecionamento, o tipo de resposta do código e o âmbito (scope). O WeChat trata da autenticação inteiramente nos seus próprios servidores. Se o convidado já tiver sessão iniciada no WeChat no seu navegador, verá um ecrã de consentimento. Se estiver a utilizar o navegador integrado na aplicação WeChat, a experiência pode ser silenciosa com o âmbito snsapi_base - sem qualquer pedido de consentimento. O WeChat redireciona então de volta para o URI de redirecionamento do seu portal com um código de autorização temporário. O seu servidor de portal troca esse código por um token de acesso chamando api.weixin.qq.com/sns/oauth2/access_token, transmitindo o seu AppID, AppSecret, o código e o tipo de concessão de authorization_code. O WeChat devolve um token de acesso, um token de atualização, o OpenID do utilizador e o âmbito concedido. Se solicitou o âmbito snsapi_userinfo, pode então fazer uma segunda chamada de API para obter a alcunha, o avatar, o género e a cidade do utilizador. Agora, os dois registos de plataforma. É aqui que a maioria das implementações falha. O WeChat tem duas plataformas de programador distintas. A WeChat Open Platform em open.weixin.qq.com gere aplicações web e aplicações móveis. A WeChat Official Accounts Platform em mp.weixin.qq.com gere contas públicas - aquilo de que a maioria dos espaços realmente necessita. Para um Captive Portal que serve utilizadores dentro do browser integrado do WeChat, necessita de uma Service Account na Official Accounts Platform. Uma Subscription Account não irá funcionar - não tem permissões de autorização de página web OAuth. Uma Service Account tem, e suporta tanto o âmbito snsapi_base como o snsapi_userinfo. Para um Captive Portal acedido a partir de um browser móvel padrão fora do WeChat - Chrome no Android, Safari no iOS - necessita de uma Website Application registada na Open Platform. Esta utiliza o âmbito snsapi_login e apresenta um código QR que o utilizador digitaliza com a sua aplicação WeChat. Na prática, a maioria das implementações em espaços físicos utiliza ambos. Um convidado no WiFi de um hotel pode abrir o portal no Chrome, ver um código QR, digitalizá-lo com o WeChat e autenticar-se. Ou pode seguir uma hiperligação no próprio WeChat, aceder ao browser integrado e autenticar-se silenciosamente com o snsapi_base. Falemos sobre a seleção de âmbito, porque este é um ponto de decisão real. O snsapi_base devolve apenas o OpenID - um identificador único para esse utilizador dentro da sua Official Account. Não requer qualquer pedido de consentimento ao utilizador. A autenticação é invisível para o utilizador. Isto é ideal para convidados recorrentes que já perfilou, ou para espaços onde deseja fricção zero à custa de zero novos dados. O snsapi_userinfo devolve o OpenID mais a alcunha do WeChat do utilizador, a imagem de perfil, o género, a definição de idioma e a cidade. Requer um ecrã de consentimento explícito. O utilizador vê um pedido a perguntar se permite que a sua Official Account aceda às suas informações. A maioria dos utilizadores aceita, mas existe fricção. A escolha certa depende do seu caso de utilização. Para o registo de um convidado pela primeira vez, onde deseja criar um perfil, utilize o snsapi_userinfo e associe-o a uma camada de consentimento em conformidade com o GDPR na página do seu portal. Para um convidado recorrente que já consentiu e cujo perfil já possui, utilize o snsapi_base para uma nova autenticação silenciosa. Agora, o lado da aplicação na rede. Obter um token OAuth prova a identidade, mas não abre automaticamente a rede. Necessita de um mecanismo para traduzir uma autenticação bem-sucedida em acesso à rede. As duas abordagens padrão são o RADIUS Change of Authorisation, definido no RFC 3576, e o bypass de endereço MAC. Com o RADIUS CoA, o seu servidor de portal envia um pedido de CoA para o controlador de rede após o OAuth bem-sucedido, e o controlador move o dispositivo da VLAN não autenticada para a VLAN de convidados. Isto funciona com Cisco Meraki, HPE Aruba, Ruckus, Juniper Mist e a maioria dos controladores de nível empresarial. Com o bypass de MAC, o servidor de portal regista o endereço MAC do dispositivo como um cliente autorizado, e o controlador permite o acesso. O bypass de MAC é mais simples de implementar, mas menos seguro, porque os endereços MAC podem ser falsificados. A plataforma de Guest WiFi da Purple lida com ambos os mecanismos. Após a conclusão do WeChat OAuth, a sobreposição na nuvem da Purple envia o sinal apropriado para o hardware subjacente - seja ele Cisco Meraki, HPE Aruba, Ruckus, Juniper Mist, Ubiquiti UniFi, Cambium, Extreme ou Fortinet. O operador do espaço não precisa de gerir essa tradução manualmente. --- RECOMENDAÇÕES DE IMPLEMENTAÇÃO E ERROS COMUNS (aproximadamente 2 minutos) Permita-me apresentar as cinco razões que levam à falha das implementações de Captive Portal com WeChat OAuth. Primeiro: a incompatibilidade do URI de redirecionamento. O WeChat valida o URI de redirecionamento em relação ao domínio autorizado que registou na plataforma. Se o seu servidor de portal utilizar um subdomínio diferente, um caminho diferente ou HTTP em vez de HTTPS, o fluxo de OAuth falha com o erro 40029 - código inválido. Registe todas as variantes de domínio que utiliza, incluindo ambientes de staging. Segundo: o AppSecret no lado do cliente. O seu AppSecret nunca deve aparecer no JavaScript do lado do cliente ou num binário de aplicação móvel. Pertence ao seu servidor. Se for exposto, qualquer pessoa pode fazer-se passar pela sua aplicação e chamar as APIs do WeChat em seu nome. Terceiro: falta de proteção contra CSRF. O parâmetro de estado no pedido de OAuth existe especificamente para evitar a falsificação de pedidos entre sites (cross-site request forgery). Gere um valor de estado criptograficamente aleatório, armazene-o na sessão do utilizador e valide-o quando o WeChat redirecionar de volta. Ignore isto e terá uma vulnerabilidade real. Quarto: a lacuna na deteção do browser na aplicação. O browser interno do WeChat define uma string de user agent específica que contém "MicroMessenger". Se o seu portal não detetar isto e não disponibilizar o fluxo de OAuth correto - fluxo de Conta Oficial para o browser na aplicação, fluxo de QR da Plataforma Aberta para browsers padrão - os utilizadores terão uma experiência com falhas ou um erro. Quinto: alinhamento com o GDPR e a PIPL. Se serve visitantes europeus, o GDPR aplica-se aos dados que recolhe através do WeChat OAuth. Se serve visitantes chineses, a Lei de Proteção de Informações Pessoais da China - PIPL - aplica-se à forma como processa os seus dados. Ambos exigem uma base legal para o processamento, limitação clara da finalidade e minimização de dados. O snsapi_base é mais fácil de justificar sob os princípios de minimização de dados do que o snsapi_userinfo. Independentemente do que recolher, documente a sua base legal e o seu período de retenção. --- PERGUNTAS E RESPOSTAS RÁPIDAS (aproximadamente 1 minuto) Question: Can I use WeChat login on a portal that also offers email and SMS login? Yes. Most enterprise portal platforms, including Purple, support multiple authentication methods on the same portal page. WeChat appears as one option alongside others. Question: Does WeChat OAuth work on iOS? Yes, but with a nuance. Apple's App Tracking Transparency framework does not affect server-side OAuth flows. WeChat login in Safari on iOS works via the QR code flow or redirect flow. The WeChat app itself handles the authentication. Question: What happens if WeChat's API is unavailable? Your portal should implement a fallback. If the WeChat API call times out or returns an error, redirect the user to an alternative login method. Do not leave them with a blank screen. Question: Can I use the OpenID as a persistent customer identifier? Within your Official Account, yes. The OpenID is stable for a given user and a given Official Account. If you have multiple Official Accounts, the same user will have different OpenIDs across them. For cross-account identity resolution, WeChat provides a UnionID, which requires your accounts to be linked on the Open Platform. --- SUMMARY AND NEXT STEPS (approximately 1 minute) To summarise. WeChat OAuth authentication for captive portals is a two-platform registration exercise, a scope decision, a network enforcement integration, and a compliance review. Get those four things right and you have a login method that serves over a billion potential visitors with zero password friction. The practical next steps are these. First, determine whether your visitors encounter the portal inside the WeChat in-app browser or in a standard mobile browser - that determines which platform registration you need. Second, decide on scope - snsapi_base for returning guests, snsapi_userinfo for first-time registration with consent. Third, confirm your network hardware supports RADIUS CoA or configure MAC bypass as an alternative. Fourth, review your privacy notice and consent flow against GDPR and PIPL requirements. Fifth, test the redirect URI, the state parameter validation, and the in-app browser detection before you go live. If you want to see how Purple handles WeChat OAuth as part of a broader Guest WiFi and analytics platform - across 80,000 venues and 440 million logins in 2024 - visit purple.ai or speak to your account team. Thanks for listening. --- END OF SCRIPT

header_image.png

执行摘要

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

技术架构

Captive Portal 会拦截来自未认证设备的 HTTP 流量,并将其重定向到托管在门户服务器上的登录页面。当您集成微信 OAuth 时,即是在此流程中插入了一个第三方身份提供商。

architecture_overview.png

具体交互步骤如下:

  1. 访客连接到 SSID。
  2. 无线接入点(AP)或无线控制器检测到缺乏已认证的会话,并将 HTTP 流量重定向到 Captive Portal URL。
  3. 访客选择微信登录。
  4. 门户服务器将浏览器重定向到微信的授权端点(open.weixin.qq.com),并传递 AppIDredirect_uriresponse_type=codescope
  5. 微信处理身份验证。如果访客在微信内置浏览器中使用 snsapi_base 作用域,此过程将静默进行。
  6. 微信携带临时授权码重定向回门户的 redirect_uri
  7. 门户服务器通过调用 api.weixin.qq.com/sns/oauth2/access_token,用该授权码换取访问令牌。
  8. 微信返回 access_tokenrefresh_token 以及用户的 openid

平台注册要求

实现微信登录需要在正确的开发者平台上进行注册。微信运营着两个不同的平台,选择错误的平台会导致集成失败。

微信公众平台

对于在微信内置浏览器中为访客提供服务的 Captive Portal,您需要在微信公众平台(mp.weixin.qq.com)上注册一个服务号。订阅号缺少必要的 OAuth 网页授权权限。服务号同时支持 snsapi_basesnsapi_userinfo 作用域。

微信开放平台

对于从微信外部的标准移动浏览器(例如 Android 上的 Chrome 或 iOS 上的 Safari)访问的 Captive Portal,您需要一个在开放平台(open.weixin.qq.com)注册的网站应用。这使用 snsapi_login 作用域,并呈现一个供用户使用其微信应用扫描的二维码。

大多数企业部署都需要进行这两种注册,以覆盖所有访问方式。

作用域选择与数据收集

作用域参数决定了微信返回给您门户服务器的数据。这一决定会同时影响用户摩擦和数据隐私合规性。

scope_comparison_chart.png

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_userinfosnsapi_base 作用域更容易符合数据最小化原则。

CSRF 防护

OAuth 请求中的 state 参数可防止跨站请求伪造。您必须生成一个加密随机的 state 值,将其存储在用户会话中,并在微信重定向返回时对其进行验证。

重定向 URI 验证

微信会根据在平台上注册的授权域名验证 redirect_uri。如果您的门户服务器使用不同的子域名、路径或使用 HTTP 代替 HTTPS,则 OAuth 流程将失败并报错 40029。

有关保护网络的更多信息,请参阅我们的 Enterprise WiFi Security: A Complete Guide for 2026

Definições Principais

snsapi_base

Um âmbito de OAuth do WeChat que devolve apenas o OpenID do utilizador sem apresentar um pedido de consentimento.

Utilizado quando as equipas de TI necessitam de autenticar visitantes recorrentes de forma silenciosa, sem causar fricção no início de sessão.

snsapi_userinfo

Um âmbito de OAuth do WeChat que devolve o OpenID juntamente com dados demográficos (alcunha, género, cidade) e requer o consentimento explícito do utilizador.

Utilizado durante o primeiro registo quando as equipas de marketing necessitam de criar um perfil de visitante.

OpenID

Um identificador único para um utilizador específico dentro de uma Conta Oficial do WeChat específica.

Utilizado como a chave primária na base de dados do portal para monitorizar o comportamento dos visitantes e as visitas recorrentes.

RADIUS CoA

Change of Authorisation (Alteração de Autorização). Um mecanismo definido no RFC 3576 que permite a um servidor modificar o estado de autorização de uma sessão ativa.

Utilizado pelo servidor do portal para indicar ao controlador sem fios que conceda acesso à rede após uma autenticação bem-sucedida no WeChat.

PIPL

Personal Information Protection Law (Lei de Proteção de Informações Pessoais). O regulamento abrangente de privacidade de dados da China.

Deve ser considerado em conjunto com o GDPR ao conceber o fluxo de consentimento para visitantes chineses que utilizam o início de sessão do WeChat.

AppID and AppSecret

As credenciais fornecidas pelo WeChat para identificar e autenticar a sua aplicação.

O AppSecret deve permanecer de forma segura no servidor do portal e nunca ser exposto no código do lado do cliente.

State Parameter

Uma string criptograficamente aleatória transmitida no pedido de OAuth e validada no retorno.

Essencial para prevenir ataques de Cross-Site Request Forgery (CSRF) no Captive Portal.

MAC Address Bypass

Um método de concessão de acesso à rede através da autorização do endereço de hardware do dispositivo, em vez de exigir a autenticação 802.1X.

Uma alternativa ao RADIUS CoA para configurações de rede mais simples, embora menos segura.

Exemplos Práticos

Uma marca de retalho de luxo em Londres pretende disponibilizar o início de sessão com o WeChat para compradores chineses. Pretendem recolher dados demográficos para compreender a sua base de clientes, mas estão preocupados com a conformidade com o GDPR e com as elevadas taxas de abandono no portal.

O retalhista deve registar uma Conta de Serviço na Plataforma de Contas Oficiais do WeChat. Deve configurar o portal para utilizar o âmbito snsapi_userinfo nas primeiras ligações para recolher dados demográficos (alcunha, género, cidade). Para garantir a conformidade com o GDPR, a página do portal deve apresentar uma opção de consentimento (opt-in) clara e consciente antes do redirecionamento do WeChat, explicando exatamente quais os dados recolhidos e porquê. Para os compradores que regressam, o portal deve detetar o endereço MAC e utilizar o snsapi_base para uma nova autenticação silenciosa, minimizando a fricção.

Comentário do Examinador: Esta abordagem equilibra a recolha de dados com a experiência do utilizador. Ao limitar o fluxo de elevada fricção `snsapi_userinfo` à primeira visita e ao utilizar o `snsapi_base` posteriormente, o retalhista maximiza a conversão, mantendo-se em conformidade com os princípios de minimização de dados.

Um estádio implementa uma nova rede WiFi utilizando controladores HPE Aruba. Configuraram o WeChat OAuth e o portal recebe com sucesso o token de acesso, mas o dispositivo do visitante permanece na página do captive portal e não consegue aceder à internet.

A integração carece de um mecanismo de aplicação de rede. O servidor do portal verificou a identidade do utilizador junto do WeChat, mas não instruiu o controlador HPE Aruba a conceder o acesso. O servidor do portal deve ser configurado para enviar uma mensagem RADIUS Change of Authorisation (CoA) para o controlador, instruindo-o a transitar o endereço MAC do utilizador do perfil de pré-autenticação para o perfil de convidado autenticado.

Comentário do Examinador: Isto realça a distinção entre a verificação de identidade e o controlo de acesso à rede. As redes empresariais exigem um protocolo como o RADIUS CoA para fazer a ponte entre a aplicação web (portal) e a infraestrutura de rede.

Perguntas de Prática

Q1. Está a implementar um Captive Portal numa cadeia de retalho. Os testes mostram que os utilizadores que abrem o portal no Safari em iOS recebem um erro ao selecionar o início de sessão com o WeChat, mas os utilizadores que abrem o portal a partir de um link de mensagem do WeChat autenticam-se com sucesso. Qual é a causa provável?

Dica: Considere a diferença entre o browser integrado do WeChat e os browsers móveis padrão.

Ver resposta modelo

A implementação está provavelmente a depender exclusivamente de uma Conta de Serviço registada na Official Accounts Platform, que apenas suporta OAuth dentro do browser integrado do WeChat. Para suportar o Safari em iOS, deve também registar uma Website Application na WeChat Open Platform e implementar a deteção de user agent para encaminhar os utilizadores do Safari para o fluxo de código QR.

Q2. Os registos do servidor do seu portal mostram erros frequentes 40029 'invalid code' retornados pela API do WeChat durante a troca do token de acesso. Que configuração deve verificar primeiro?

Dica: Pense em como o WeChat valida a origem do pedido de autenticação.

Ver resposta modelo

Deve verificar a configuração do redirect_uri. O WeChat valida rigorosamente o URI de redirecionamento em relação ao domínio autorizado registado na consola do programador. Se o portal estiver a utilizar um subdomínio diferente, ou se perder o HTTPS, o WeChat rejeitará a troca de código.

Q3. O operador de um espaço pretende recolher dados dos visitantes, mas insiste em que não haja qualquer fricção durante o processo de início de sessão. Solicita que configure o início de sessão do WeChat para recolher a alcunha e a cidade do visitante sem apresentar um pedido de consentimento. Como responde?

Dica: Reveja as capacidades dos diferentes âmbitos (scopes) de OAuth.

Ver resposta modelo

Deve informar o operador de que tal é tecnicamente impossível. A recolha de dados demográficos como a alcunha e a cidade requer o âmbito snsapi_userinfo, que aciona obrigatoriamente um pedido de consentimento do WeChat. Para obter zero fricção, deve utilizar o snsapi_base, que funciona de forma silenciosa mas apenas retorna o OpenID.

Continue a ler esta série

Conceber Captive Portals B2B: Recolha de Nome Registado e Dados da Empresa

Este guia fornece aos gestores de TI e operadores de espaços uma estrutura técnica independente de fornecedor para conceber Captive Portals B2B. Detalha como estruturar os campos de registo para capturar o nome registado e os dados da empresa, garantindo elevadas taxas de conclusão, mantendo a conformidade com o GDPR e construindo inteligência ao nível da conta.

Ler o guia →

Arquitetura de Captive Portal: Segurança, Redirecionamento e Boas Práticas

Uma referência técnica definitiva sobre arquitetura de captive portal empresarial. Este guia analisa o isolamento de rede, redirecionamento de DNS, autenticação RADIUS e conformidade de segurança para líderes de TI que implementam redes WiFi de convidados seguras e ricas em dados.

Ler o guia →

Otimizar Captive Portals B2B: Capturar Nomes de Empresas e Dados Profissionais

Este guia explica como os gestores de TI, arquitetos de rede e diretores de operações de espaços podem configurar Captive Portals B2B para capturar dados profissionais - nomes de empresas, cargos e endereços de email profissionais - no momento do login no WiFi. Abrange toda a arquitetura técnica, desde o isolamento de VLAN e autenticação RADIUS até à integração de CRM com Salesforce e HubSpot, com conformidade GDPR e CCPA integrada. Os espaços que implementam isto corretamente transformam a sua rede WiFi de convidados num motor de dados primários e num sistema automatizado de geração de leads.

Ler o guia →