本页面

Qt Network 授权安全注意事项

本页涉及使用Qt Network 授权的应用程序的安全注意事项。此处的大部分内容侧重于 OAuth 2.0 授权框架和 OpenID。

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

访问控制

访问控制涉及使用身份和权限检查系统为用户提供资源。访问控制包括授权、认证和日志服务。 Qt Network 授权的应用程序接口以 OAuth 2.0 授权框架为重点实现访问控制。 Qt Network 授权支持授权码流程(使用 PKCE)和设备授权流程。

对于系统来说,根据权限和权限进行有意的分离是访问控制的第一步。用户类别可以决定可以访问某些资源和服务的组别。同样,资源或服务的权限也决定了对它们的可用操作。只请求应用程序需要的 OAuth 范围。限制范围可减少令牌泄露可能造成的影响。

系统还必须实施访问管理,以实现灵活性和监督。提供访问和服务必须是系统设计的一部分,以便在不影响安全性的情况下轻松添加或删除用户和资源。活动日志有助于审计和安全分析。

众所周知的一种设计是基于角色的访问控制(RBAC)。

身份验证和单点登录

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

连接应用程序需要验证使用受限资源的用户身份。通常情况下,应用程序通过在现有数据库中检查用户凭证(如用户名和密码)来验证用户身份。这种方法容易造成错误验证和数据泄露。许多缓解技术都与用户行为有关,应用程序可以强制执行安全策略,如要求使用密码。应用程序可以使用 Qt 的验证器和 Widgets,通过信息和限制创建弱密码来引导用户。

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

Qt Network 授权可通过 OpenID Connect(OAuth 2.0 的一个身份层)检索 JSON Web 标记(JWT)。通常情况下,身份验证和授权是同一系统的一部分。将访问令牌、刷新令牌和 ID 令牌视为敏感数据。使用平台安全存储或加密技术安全地存储它们。不要以纯文本存储令牌。

授权和资源提供

授权是根据用户在资源上的特权和权限,检查用户是否可以访问该资源。如果没有适当的授权,用户即使没有权限,也可以访问资源并执行操作。攻击者可以修改和降低数据的完整性或滥用资源,从而造成拒绝服务。

作为基本的预防措施,在执行可能导致滥用资源的操作前,应进行授权检查。每当用户访问服务器端资源时,都会进行这种检查。用户的权限和资源上的权限决定了用户是否可以在资源上执行操作。根据资源情况,可能还需要额外的授权检查。当用户注销或应用程序不再需要时,撤销访问和刷新令牌。

使用外部用户代理

根据RFC 8252,按照OAuth 2.0 的定义,应用程序可以为授权端点使用外部嵌入式用户代理。嵌入式用户代理通常是在应用程序中提供和控制的网络视图。外部用户代理是系统浏览器或其他不受请求应用程序控制的应用程序。

RFC 8252建议使用外部用户代理而不是嵌入式网络视图进行授权。应用程序控制着嵌入式用户代理,无法在应用程序和授权节点之间分离特权访问。这种设置是不安全的,因为应用程序可以记录键盘输入,并以虚假的安全感欺骗用户。不过,当外部用户代理不实用时,也可以使用正确配置的嵌入式浏览器,如 Qt XMLWebEngine

此外,使用系统浏览器作为外部用户代理、浏览器标签和存储凭证可以简化用户体验。例如,用户可以在浏览器中使用自己保存的用户名和密码。同样,使用密码管理器作为外部用户代理也能提高简便性和信任度。

PKCE 和状态参数

代码交换证明密钥(PKCE)可防止授权代码流中的授权代码拦截攻击。 Qt Network 授权默认启用 PKCE。

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

平台注意事项

重定向 URI 处理因平台而异。在移动平台上,HTTPS 重定向 URI 可通过应用声明 URL 安全处理。在桌面平台上,HTTP 重定向 URI 到 localhost 仍是本地应用程序的有效选择。

联网应用程序的安全资源

以下是网络安全指导资源:

© 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.