本页面

Qt Network 授权安全注意事项

本页面介绍了使用Qt Network 授权的应用程序的安全注意事项。其中大部分内容侧重于OAuth 2.0授权框架和OpenID。

有关 OAuth 2.0 协议流程,请参阅RFC 6749;有关原生应用程序的安全问题,请参阅RFC 8252。

访问控制

访问控制涉及通过身份和权限验证系统向用户分配资源。因此,访问控制包括授权、身份验证和日志记录服务。Qt Network 授权的API在实现访问控制时侧重于OAuth 2.0授权框架。Qt Network 授权支持授权码流程(带PKCE)和设备授权流程。

对于系统而言,根据特权和权限进行有意的划分是访问控制的第一步。用户类别可以决定哪些组可以访问特定的资源和服务。同样,资源或服务的权限可以决定对它们可执行的操作。仅请求您的应用程序所需的 OAuth 范围。限制范围可以减少令牌泄露时可能造成的影响。

系统还必须实施访问管理,以确保灵活性并便于监督。访问和服务配置必须纳入系统设计,以便在不影响安全性的前提下轻松添加或移除用户和资源。活动日志有助于审计和安全分析。

一种广为人知的设计是基于角色的访问控制(RBAC)。

身份验证与单点登录

身份验证是指对用户身份的核查。脆弱的身份验证方法会导致向错误的用户授予访问权限,从而可能导致私有数据泄露和恶意操作的执行。

联网应用程序需要验证使用受限资源的用户身份。通常,应用程序通过查询现有数据库中的用户凭据(如用户名和密码)来验证用户身份。这种方法容易受到虚假认证和数据泄露的威胁。 许多缓解措施针对用户行为,应用程序可强制执行安全策略,例如要求使用强密码。应用程序可利用 Qt 的验证器和 Widgets,通过提示信息引导用户,并限制弱密码的生成。

使用单点登录(SSO)等集中式身份验证系统,可最大限度地减少密码和身份管理不当的情况。

Qt Network 授权可通过 OpenID Connect(这是构建在 OAuth 2.0 之上的身份层)获取 JSON Web Tokens(JWT)。通常,身份验证和授权属于同一个系统。应将访问令牌、刷新令牌和 ID 令牌视为敏感数据。使用平台的安全存储或加密技术进行安全存储。切勿以明文形式存储令牌。

授权与资源分配

授权是指根据用户对某资源的权限和许可,检查用户是否具有访问该资源的权限。如果没有适当的授权,用户即使没有相应权限,仍可能访问资源并执行操作。攻击者可能会篡改数据、破坏数据完整性或滥用资源,从而导致服务拒绝(DoS)。

作为基本预防措施,在执行可能导致资源被滥用的操作之前,请先进行授权检查。每次用户访问服务器端资源时,均可执行此检查。 用户的权限及其对资源的访问权限共同决定了用户是否可以对该资源执行操作。根据资源的不同,可能需要进行额外的授权检查。当用户注销或应用程序不再需要时,应撤销访问令牌和刷新令牌。

使用外部用户代理

根据RFC 8252,应用程序可以为授权端点使用外部或嵌入式用户代理,具体定义见OAuth 2.0。嵌入式用户代理通常是应用程序内部提供并控制的 WebView。 外部用户代理是指系统浏览器或其他不受请求应用程序控制的应用程序。

RFC 8252建议在授权过程中使用外部用户代理,而非嵌入式 WebView。 应用程序控制着嵌入式用户代理,且无法将应用程序与授权节点之间的特权访问进行分离。这种设置是不安全的,因为应用程序可以记录按键操作,并可能让用户产生虚假的安全感。不过,当外部用户代理不切实际时,也可以使用配置得当的嵌入式浏览器,例如Qt WebEngine 。

此外,若将系统浏览器作为外部用户代理,浏览器标签页和已存储的凭据可简化用户体验。例如,用户可直接使用浏览器中已保存的用户名和密码。同样,使用密码管理器作为外部用户代理也能提高操作简便性和信任度。

PKCE 与状态参数

“代码交换证明密钥”(Proof Key for Code Exchange,PKCE)可在授权码流程中防范授权码拦截攻击。Qt Network 授权功能默认启用 PKCE。

Qt Network 授权功能默认会生成随机状态值,以防止跨站请求伪造(CSRF)攻击。如果您覆盖状态参数,请避免使用硬编码的字符串。

平台注意事项

重定向 URI 的处理因平台而异。在移动平台上,可通过应用声明的 URL 安全地处理 HTTPS 重定向 URI。在桌面平台上,针对本地主机的 HTTP 重定向 URI 对于原生应用程序而言仍然是一个有效的选项。

连接应用程序的安全资源

以下是有关网络安全指南的资源:

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.