集成微信 WiFi 认证:面向亚太地区客户的 Captive Portal 准入引导
微信拥有 14.1 亿月活跃用户,是中国全球消费者的主要数字身份标识。本指南阐述了如何将微信 OAuth 2.0 认证集成到亚太地区场所的企业级 captive portal 中,内容涵盖平台注册、范围选择、RADIUS 授权变更(CoA)执行,以及兼容 GDPR 与中国《个人信息保护法》(PIPL)的双重合规框架。本指南面向需要在本季度采取行动的 IT 经理、网络架构师和场所运营总监。
收听本指南
查看播客转录
📚 核心系列的一部分:Captive Portal Guide →

执行摘要
对于在亚太地区运营或在全球范围内服务中国游客的企业场所来说,微信 WiFi 认证不再是可选的。截至 2025 年,微信的月活跃用户已达 14.1 亿(来源:腾讯),是中国消费者的主要数字身份。当访客连接到您的 SSID 时,如果只看到电子邮件或 Facebook 登录选项,会立即感到不便。他们几乎肯定拥有微信。他们几乎肯定没有在该设备上配置本地电子邮件地址。
本指南详细介绍了如何将微信 OAuth 2.0 集成到 Captive Portal 中。我们涵盖了腾讯要求的两个不同的平台注册、决定您收集哪些第一方数据的范围选择,以及将成功的 OAuth 交换转化为实际网络访问的 RADIUS 授权变更 (CoA) 机制。我们还探讨了 GDPR 与中国《个人信息保护法》(PIPL)重叠的合规要求。
Purple 的 Guest WiFi 平台可自动执行 Cisco Meraki、HPE Aruba、Ruckus、Juniper Mist、Ubiquiti UniFi、Cambium、Extreme 和 Fortinet 硬件的网络执行层。Purple 在全球 80,000 多个活跃场所运营,并在 2024 年记录了 4.4 亿次登录(Purple 内部数据)。
技术深度剖析
OAuth 2.0 流程
Captive Portal(一种基于 Web 的身份验证网关,用于拦截来自未通过身份验证设备的 HTTP 流量)会将访客重定向到托管在门户服务器(本地或云端)上的登录页面。添加微信 OAuth 会将腾讯的身份基础设施插入到该流程中。
其执行顺序如下。访客关联到 SSID。无线控制器检测到不存在已验证的会话,并将所有 HTTP 流量重定向到 Captive Portal URL。门户页面加载并呈现登录选项(包括微信)。访客选择微信。门户服务器构建指向微信位于 open.weixin.qq.com 的授权终端节点的重定向,并传递四个参数:AppID、重定向 URI、设置为 code 的响应类型以及请求的范围。
WeChat 完全在其自身的基础设施上对用户进行身份验证。如果访客已经通过 WeChat 应用内浏览器登录,则 snsapi_base 作用域允许进行静默身份验证,且不显示任何可见提示。WeChat 将重定向回 Portal 注册的重定向 URI,并带有一个短期的授权码。Portal 服务器通过使用 AppID、AppSecret、代码和授权类型调用 api.weixin.qq.com/sns/oauth2/access_token 来用此代码交换访问令牌。WeChat 返回访问令牌、刷新令牌、用户的 OpenID 以及授予的作用域。如果请求了 snsapi_userinfo,则对 api.weixin.qq.com/sns/userinfo 进行第二次 API 调用,以检索用户的昵称、个人头像、性别和城市。

平台注册:导致大多数部署失败的决定
腾讯运营着两个独立的开发者平台,选择错误的平台是导致实施失败最常见的原因。
| 访问场景 | 所需注册 | 平台 URL | 支持的作用域 |
|---|---|---|---|
| WeChat 应用内浏览器 | 服务号(公众平台) | mp.weixin.qq.com | snsapi_base, snsapi_userinfo |
| 标准移动端浏览器 (Chrome, Safari) | 网站应用(开放平台) | open.weixin.qq.com | snsapi_login(二维码流程) |
公众平台上的订阅号将无法工作。它缺乏 OAuth 网页授权权限。只有服务号才拥有这些权限。
酒店 和 零售 行业的大多数企业部署都会同时实施这两种注册。酒店的访客可能会在 Chrome 中打开 Portal,用 WeChat 扫描二维码,并通过开放平台流程进行身份验证。或者,他们可能会点击 WeChat 内部的链接,进入应用内浏览器,并通过公众平台流程进行静默身份验证。这两种路径都必须进行处理。
作用域选择与数据收集
OAuth 作用域是一个真正的架构决策,而不是一个配置细节。它决定了用户体验到的阻碍以及您的 WiFi Analytics 平台接收的数据。
snsapi_base 仅返回 OpenID - 这是该用户在您的服务号中的一个稳定、唯一的标识符。它不需要用户授权提示。身份验证是无感的。这适用于您已拥有其个人资料的回访访客,或者适用于体育场馆和交通枢纽等以连接速度为首要任务的高吞吐量环境。
snsapi_userinfo 会返回 OpenID 以及昵称、头像、性别、语言设置和城市。它会触发一个显式的授权同意屏幕。将其用于首次访客注册,以建立第一方数据配置文件,并在门户页面上配合符合 PIPL 和 GDPR 规范的同意层。
实用规则:为了速度使用 snsapi_base,为了数据使用 snsapi_userinfo。您可以通过检查用户的 OpenID 是否已存在于您的数据库中来实现这两者。如果存在,请求 snsapi_base。如果不存在,请求 snsapi_userinfo。
网络执行:RADIUS CoA 和 MAC 绕过
OAuth 令牌仅证明身份。它不会打开网络。必须有单独的机制将成功的身份验证转化为网络策略更改。
RADIUS 授权更改 (CoA)(在 RFC 3576 中定义)是标准方法。在门户服务器收到有效的 OAuth 令牌后,它会向无线控制器发送 CoA 请求。控制器会更新会话,将设备从围墙花园 VLAN(一个仅允许门户流量的受限网络段)移动到完整的访客 VLAN。这适用于 Cisco Meraki、HPE Aruba、Ruckus、Juniper Mist、Ubiquiti UniFi、Cambium、Extreme Networks 和 Fortinet。
MAC 地址绕过会在 OAuth 成功后将设备的 MAC 地址注册为已授权客户端。然后,控制器允许来自该地址的流量,无需进一步挑战。它的实现更简单,但带来两个风险:MAC 地址可以被伪造,且 iOS 14 和 Android 10 起默认使用 MAC 地址随机化,这会在重新连接时破坏该机制。
对于任何注重安全性的部署,RADIUS CoA 都是正确的选择。有关保护访客网络的更多信息,请参阅 什么是安全 WiFi:2026 年商业必备指南 和 企业 WiFi 安全:2026 年完整指南 。
实施指南
部署前清单
在编写任何配置之前,请完成以下五个步骤。
第一,确定访问上下文。调查您的场馆,确认访客是在 微信 应用内浏览器、标准移动浏览器中遇到门户,还是两者都有。答案决定了您的平台注册要求。
第二,在正确的平台上注册。对于应用内浏览器访问,在 微信 公众平台注册服务号。对于标准浏览器访问,在 微信 开放平台注册网站应用。记录每个应用的 AppID 和 AppSecret。
第三,配置您的重定向 URI。注册您的门户使用的每个域名和子域名,包括测试环境。微信 执行精确匹配验证。不匹配将返回错误 40029。
第四,实现服务端令牌交换。AppSecret 绝不能出现在客户端代码中。构建一个服务端接口,接受授权码,将其交换为令牌,并仅返回您的门户需要的数据。
第五,实现 state 参数以防御 CSRF。生成一个加密随机值,将其存储在用户会话中,在 OAuth 请求中传递它,并在返回时进行验证。
Ruckus SmartZone 的配置步骤
对于运行 Ruckus SmartZone 的场所,微信门户配置位于“服务与配置文件”(Services and Profiles)、“热点与门户”(Hotspots and Portals),然后是“微信”(WeChat)标签页。您需要配置认证 URL(您的门户服务器的微信回调端点)、DNAT 目标(处理未认证客户端重定向的服务器)以及宽限期(在默认 60 分钟内,最近断开连接的用户可以重新连接而无需重新认证的时间窗口)。您还需要配置围墙花园白名单,以在认证阶段允许流量访问微信的 API 端点。另请参阅 逐步指南:为访客 WiFi Captive Portal 配置锐捷无线控制器 以获取类似的控制器配置模式。
应用内浏览器检测
微信的应用内浏览器会设置包含 MicroMessenger 的用户代理字符串。您的门户必须检测此字符串并提供相应的 OAuth 流程。如果存在 MicroMessenger,请使用公众号流程。如果不存在,请使用开放平台二维码流程。如果未能正确检测,会导致体验中断或认证错误。
最佳实践
数据最小化与双重框架合规
GDPR(适用于欧洲游客)和《个人信息保护法》(PIPL,适用于中国公民)都要求处理个人数据具有合法基础、明确的目的限制以及数据最小化。在数据最小化原则下,snsapi_base 作用域比 snsapi_userinfo 更易于证明其合理性。当您确实通过 snsapi_userinfo 收集人口统计数据时,请记录您的法律依据、保留期以及与腾讯的数据处理协议。
自 2021 年 11 月起生效的《个人信息保护法》(PIPL)要求对敏感个人信息获得明确同意,并强制要求中国境外的个人信息处理者执行同等的数据保护标准。如果您的门户服务器位于中国大陆境外,您必须评估跨国数据传输规则是否适用于您接收的微信 OpenID 和个人资料数据。
适用于多场所部署的 UnionID
每个用户的 OpenID 在每个公众号中都是唯一的。如果您在不同场所运营多个公众号,同一位访客在每个公众号中的 OpenID 都会不同。微信提供了一个 UnionID,该 ID 在链接到同一个开放平台注册的所有账号中保持一致。对于管理多个场所的连锁酒店、零售集团或机场运营商,请从一开始就实施基于 UnionID 的身份解析。
安全加固
将 AppSecret 存储在环境变量或密钥管理器中,切勿存储在源代码中。如果怀疑泄露,请立即对其进行轮换。在您的令牌交换端点上实施速率限制以防止滥用。记录所有 OAuth 错误,特别是 40029(无效代码)和 40163(代码已过期),因为这些错误表明存在配置错误或主动探测。
有关访客网络安全架构的更广泛视角,请参阅 为什么消费级 WiFi 设备不属于您的访客网络 。
案例研究
新加坡奢华连锁酒店
新加坡一家拥有 350 间客房的奢华酒店主要服务于中国商务出差群体,该酒店在其现有的电子邮件登录选项之外,实施了微信 WiFi 认证。在实施之前,前台员工报告平均每天有 15 起关于 WiFi 登录困难的访客投诉。中国访客试图使用他们未在差旅设备上配置的电子邮件地址。
该酒店在微信公众平台注册了服务号,并在开放平台注册了网站应用。他们为首次连接配置了 snsapi_userinfo,为通过 MAC 地址识别的再次光临访客配置了 snsapi_base。HPE Aruba 控制器配置了 RADIUS CoA 以处理会话晋级。
在 30 天内,访客 WiFi 登录投诉降至每天两起以下。该酒店的 WiFi Analytics 数据库在第一个月增加了 4,200 个经过验证的第一方个人资料,城市级的受众特征数据使其能够进行有针对性的离店后沟通。
吉隆坡国际购物中心
吉隆坡的一家高端购物中心(仅在马来西亚就拥有 1200 万微信用户)需要一种符合其购物群体数字期望的 WiFi 接入体验。该购物中心在 180,000 平方米的零售区域运营着 Cisco Meraki 接入点。
该部署使用 Purple 的 Guest WiFi 平台作为云覆盖,以微信 OAuth 作为主要认证方式,短信 OTP 作为备用方式。Purple 独立于硬件的架构处理了与 Cisco Meraki 的 RADIUS CoA 集成,无需进行自定义开发。
部署后的第一季度,该商场的 WiFi 会话启动量增加了 34%,这归功于微信用户接入摩擦的减少。通过 snsapi_userinfo 同意流程收集的第一方数据使该商场的营销团队能够按常住城市对购物者进行细分,以便进行有针对性的活动推送。

故障排除与风险缓解
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 40029 invalid code | 重定向 URI 不匹配或代码重复使用 | 验证注册的 URI 是否完全匹配;代码为一次性使用 |
| 40163 验证码过期 | 令牌交换延迟超过 5 分钟 | 减少服务器端处理时间;实现重试逻辑 |
| 身份验证后白屏 | RADIUS CoA 未配置或失败 | 检查控制器 CoA 设置和 UDP 端口 3799 上的防火墙规则 |
| MAC 随机化破坏返回访客流程 | iOS/Android MAC 随机化 | 迁移到基于 OpenID 的会话跟踪;避免仅使用 MAC 进行识别 |
| snsapi_userinfo 返回空字段 | 用户设置了微信隐私限制 | 妥善处理空字段;不强制要求提供个人资料数据即可访问 |
投资回报率与业务影响
微信 WiFi 身份验证的商业案例基于三个可衡量的结果。
第一方数据获取。每次 snsapi_userinfo 身份验证都会生成一个包含受众统计数据的已验证访客档案。对于一家入住率为 70%、其中 40% 为中国游客的 200 间客房酒店而言,这意味着每年可增加大约 20,000 个新的已验证档案,每个档案都与支持持续重新互动的微信身份绑定。
减轻支持负担。登录摩擦是导致访客 WiFi 支持电话的主要原因。在现有选项之外增加微信身份验证的场所,其与 WiFi 相关的服务台咨询量持续下降,从而为员工腾出时间进行更有价值的互动。
营销覆盖。微信公众号允许场所向关注者推送通知。通过您的公众号进行身份验证的访客可以被提示关注该公众号,从而在微信生态系统内建立直接沟通渠道,中国消费者每天在该生态系统内平均花费 82 分钟(来源:Walk the Chat)。
Purple 的 Engage 计划对此进行了进一步扩展,能够基于在 WiFi 身份验证时收集的第一方数据,实现自动化的访问后消息推送、会员触发器和细分营销活动。
关键定义
Captive Portal
一种基于 Web 的认证网关,它拦截来自未认证设备的 HTTP 流量,并将其重定向到登录页面,然后再授予网络访问权限。
向用户呈现访客 WiFi 认证的机制。WeChat OAuth 是 Captive Portal 可以提供的几种认证方法之一。
OAuth 2.0
一种行业标准的授权协议,允许第三方应用程序(Captive Portal)代表用户获得对 Web 服务(WeChat)的有限访问权限,而无需用户与第三方共享密码。
使 WeChat 登录成为可能的底层框架。Portal 永远不会看到用户的 WeChat 凭据;它只接收一个确认 WeChat 已对其进行认证的令牌。
RADIUS CoA
授权变更(Change of Authorisation)。RFC 3576 中定义的一种机制,允许 RADIUS 服务器动态修改活动网络客户端的会话授权属性,例如更改 VLAN 分配。
将成功的 WeChat OAuth 交换转化为实际网络访问的网络执行机制。如果没有 CoA,访客虽然完成了认证,但控制器不知道需要打开网络权限。
OpenID
WeChat 分配给特定用户针对特定公众号或网站应用的唯一标识符。它在不同会话之间保持稳定,但在不同账号之间有所不同。
用于在您的 WiFi 分析数据库中识别访客的主键。如果您运营多个公众号并需要跨账号进行身份识别,请改用 UnionID。
snsapi_base
一种 WeChat OAuth 权限范围,支持静默认证,仅返回用户的 OpenID,而不显示授权提示页面。
适用于回头客或以连接速度为首要任务的高吞吐量环境。除了 OpenID 之外,不返回任何受众特征数据。
snsapi_userinfo
一种 WeChat OAuth 权限范围,返回用户的 OpenID、昵称、头像、性别、语言和城市,需要显式的用户授权同意页面。
用于首次访客注册以构建第一方数据画像。必须与符合 GDPR 和 PIPL 要求的同意层配合使用。
PIPL
《个人信息保护法》。中国全面的数据隐私立法,自 2021 年 11 月起生效,旨在规范如何收集、处理和传输中国公民的个人数据。
适用于通过 WeChat OAuth 从中国公民收集数据的任何场所,无论该场所地理位置何在。要求显式同意、目的限制和数据最小化。
AppSecret
WeChat 颁发的机密加密密钥,用于在您的应用程序调用 WeChat 的令牌交换 API 时进行身份验证。
必须仅存储在服务器端。在客户端代码中泄露会让任何一方都能够冒充您的应用程序,并对 WeChat 发起未经授权的 API 调用。
VLAN
虚拟局域网(Virtual Local Area Network)。一种在数据链路层隔离流量的逻辑网络分段,允许单个物理网络承载多个隔离的流量流。
在 Captive Portal 部署中用于将未认证的设备(围墙花园 VLAN)与已认证的访客(访客 VLAN)分离开来。RADIUS CoA 会在认证成功后在 VLAN 之间移动设备。
UnionID
一个 WeChat 标识符,对于绑定到同一个开放平台注册账号的所有公众号和网站应用,同一用户的 UnionID 保持一致。
对于需要在多个场所(每个场所都有自己的公众号)识别同一访客的连锁酒店、零售集团和多场所运营商至关重要。
应用实例
新加坡一家拥有 200 间客房的奢华酒店使用 HPE Aruba 控制器,并接待大量中国商旅客户。他们希望收集首次入住客人的受众属性数据,并确保回访客人自动连接而无需再次看到门户页面。他们应该如何配置微信 OAuth 集成?
第一步:在微信公众平台(mp.weixin.qq.com)注册服务号,用于处理在微信内置浏览器内访问门户的访客。在微信开放平台(open.weixin.qq.com)注册网站应用,用于处理使用标准移动浏览器的访客。
第二步:配置 Captive Portal 以检测 MicroMessenger 用户代理字符串。对内置浏览器用户提供公众平台 OAuth 流程,对标准浏览器用户提供开放平台二维码流程。
第三步:对于首次连接(数据库中不存在现有 OpenID),请求 snsapi_userinfo 权限范围。在 OAuth 重定向之前展示符合 PIPL 的同意屏幕。将返回的 OpenID、昵称、城市和性别存储在访客个人资料数据库中。
第四步:对于回访客人(数据库中已存在 OpenID),请求 snsapi_base 权限范围。这将进行静默认证,用户端无可见提示。
第五步:在 UDP 端口 3799 上为 RADIUS CoA 配置 HPE Aruba 控制器。OAuth 成功后,门户服务器向控制器发送 CoA 请求,将设备从围墙花园 VLAN 提升到访客 VLAN。
第六步:结合 OpenID 实现 MAC 地址日志记录,以处理回访客人检测。请注意,由于 MAC 地址随机化,需要将 OpenID 作为主要标识符,而非仅靠 MAC 地址。
某零售连锁店的 IT 团队报告称,三个商场网点的微信 WiFi 登录失败率极高。用户在微信中完成了认证,但被返回到门户页面并显示错误。门户日志显示错误码 40029。可能的原因是什么,如何解决?
错误码 40029 意味着微信在令牌交换期间拒绝了授权码。两个最常见的原因是重定向 URI 不匹配和授权码重复使用。
第一步:登录微信公众平台和微信开放平台的开发者控制台。导航至 OAuth 设置并列出所有已注册的重定向 URI。
第二步:将这些 URI 与您的门户服务器在三个网点的生产环境中实际使用的重定向 URI 进行对比。检查子域名差异(如 portal.brand.com 与 brand.com)、协议差异(HTTP 与 HTTPS)以及路径差异(/callback 与 /wechat/callback)。
第三步:在微信控制台中注册每一个变体。微信执行的是精确匹配验证,而非前缀匹配。
第四步:如果 URI 匹配,调查您的门户服务器是否在尝试重复使用授权码。微信授权码为一次性使用,且在 5 分钟后过期。如果您的服务器使用相同的授权码重试令牌交换,则在第二次尝试时会收到 40029 错误。
第五步:在令牌交换端点中实现幂等性,以防止重复请求。
练习题
Q1. 您正在为一个可容纳 60,000 人的体育场部署 Captive Portal,该体育场将举办国际赛事,且拥有庞大的中国球迷群体。首要任务是让所有观众在开门后的前 15 分钟内上线,以减轻蜂窝网络拥堵。营销数据收集是次要目标。您应该配置哪个微信 OAuth 作用域(scope),为什么?
提示:考虑向 Portal 服务器上 15,000 个并发用户显示授权同意页面所带来的影响。
查看标准答案
配置 snsapi_base 作用域。这可以实现静默授权,无需用户同意提示,从而提供最快的入网体验。在体育场规模下,同意屏幕会增加摩擦,这种摩擦会在数千个同时连接中成倍增加,并可能导致门户服务器负载飙升。snsapi_base 仅返回 OpenID,这足以记录会话并识别再次光顾的球迷。对于您希望获取人口统计数据的首次光顾球迷,您可以通过连接后的调查表提示其完善个人资料,而不是在认证入口处进行阻拦。
Q2. 您团队中的一名网络架构师建议将微信 AppSecret 存储在 Captive Portal 的客户端 JavaScript 中,通过直接从浏览器发起令牌交换调用来减少服务器往返。请解释为什么这种方法是严重的安全漏洞,以及正确的架构是什么。
提示:考虑谁可以查看客户端代码,以及 AppSecret 允许他们执行什么操作。
查看标准答案
将 AppSecret 存储在客户端 JavaScript 中会将其暴露给任何查看页面源代码或拦截网络流量的人。AppSecret 用于向微信的 API 验证您的应用程序身份。利用它,恶意攻击者可以冒充您的应用程序,使用任何有效的授权码调用微信的令牌交换接口,检索用户 OpenID 和个人资料数据,并可能耗尽您的 API 速率限制。正确的架构是服务器端令牌交换接口。浏览器从微信接收授权码并将其传递给您的服务器。您的服务器使用存储在环境变量或密钥管理器中的 AppSecret,将该代码交换为令牌,并仅返回门户所需的数据。AppSecret 永远不会离开您的服务器。
Q3. 您的场馆在不同城市运营着三家酒店,每家都有自己的微信公众号。在所有三家酒店都进行过认证的常旅客会员在您的数据库中拥有三个不同的 OpenID。您如何将这些关联为一个统一的宾客身份?
提示:微信提供了一种跨账号身份关联的机制,需要特定的平台配置。
查看标准答案
实现微信的 UnionID 机制。将所有三个公众号绑定到 open.weixin.qq.com 上的同一个开放平台账号。绑定后,微信会在 snsapi_userinfo 响应中与 OpenID 一起返回 UnionID。对于同一个用户,绑定在同一个开放平台账号下的所有应用中,UnionID 是唯一的且保持一致。将您的数据库迁移为使用 UnionID 作为跨店记录的主要宾客标识符,同时保留每个账号的 OpenID 用于特定账号的 API 调用。对于在启用 UnionID 之前已认证的宾客,在其下次光顾时使用 snsapi_userinfo 触发重新认证以获取 UnionID。
Q4. 在运行 Cisco Meraki 接入点的零售场所部署微信 WiFi 认证后,宾客报告称他们成功完成了微信登录,但返回到了门户页面且无法浏览互联网。门户服务器日志显示成功获取令牌。最可能的原因是什么,您如何进行诊断?
提示:门户已验证身份。但还有什么步骤没有发生?
查看标准答案
RADIUS 授权变更(CoA)未完成。门户服务器已通过微信 OAuth 验证了访客的身份,但未能成功指示 Cisco Meraki 控制器将设备从隔离区 VLAN 移至访客 VLAN。请通过检查以下各项进行诊断:(1)Meraki 控制器是否已启用 RADIUS CoA,且门户服务器的 IP 是否已列为授权的 CoA 客户端;(2)门户服务器与控制器之间的 UDP 端口 3799 是否已开放;(3)门户服务器日志中是否存在 CoA 请求错误或超时;(4)双方配置的共享密钥是否匹配。如果您的 Meraki 许可层级不支持 CoA,则 MAC 地址旁路是备用方案,尽管这会带来指南中指出的 MAC 随机化风险。
继续阅读本系列
Ruijie Captive Portal:使用 Purple 访客 WiFi 进行设置
介绍 Purple 的云端访客 WiFi 如何利用 Web 认证和 RADIUS(通过命令行配置)运行在 Ruijie RG 系列接入点之上,以及在何处可以找到具体的设置步骤。
设计 B2B Captive Portal:收集注册姓名与公司数据
本指南为 IT 经理和场所运营者提供了一个与供应商无关的技术框架,用于设计 B2B captive portals。它详细介绍了如何构建注册字段以捕获注册姓名和公司数据,在确保高完成率的同时,保持 GDPR 合规并构建账户级智能。
Captive Portal 架构:安全性、重定向与最佳实践
企业级 Captive Portal 架构的权威技术参考。本指南为部署安全、数据丰富的访客 WiFi 网络的 IT 决策者深入剖析网络隔离、DNS 重定向、RADIUS 身份验证以及安全合规性。