QOAuth2AuthorizationCodeFlow Class

QOAuth2AuthorizationCodeFlow 类提供了授权码授予流程的实现。更多

Header: #include <QOAuth2AuthorizationCodeFlow>
CMake: find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)
target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth)
qmake: QT += networkauth
继承: QAbstractOAuth2

公共类型

(since 6.8) enum class PkceMethod { None, Plain, S256 }

属性

公共功能

QOAuth2AuthorizationCodeFlow(QObject *parent = nullptr)
QOAuth2AuthorizationCodeFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier, QNetworkAccessManager *manager, QObject *parent = nullptr)
QOAuth2AuthorizationCodeFlow(const QUrl &authenticateUrl, const QUrl &accessTokenUrl, QNetworkAccessManager *manager, QObject *parent = nullptr)
QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier, const QUrl &authenticateUrl, const QUrl &accessTokenUrl, QNetworkAccessManager *manager, QObject *parent = nullptr)
virtual ~QOAuth2AuthorizationCodeFlow()
QUrl accessTokenUrl() const
(since 6.8) QOAuth2AuthorizationCodeFlow::PkceMethod pkceMethod() const
void setAccessTokenUrl(const QUrl &accessTokenUrl)
(since 6.8) void setPkceMethod(QOAuth2AuthorizationCodeFlow::PkceMethod method, qsizetype length = 43)

公共插槽

virtual void grant() override
void refreshAccessToken()

信号

void accessTokenUrlChanged(const QUrl &accessTokenUrl)

受保护函数

QUrl buildAuthenticateUrl(const QMultiMap<QString, QVariant> &parameters = {})
void requestAccessToken(const QString &code)

重新实现的受保护函数

virtual void resourceOwnerAuthorization(const QUrl &url, const QMultiMap<QString, QVariant> &parameters = {}) override

详细说明

该类实现了授权码授予流程,用于获取和刷新访问令牌。这是一个基于重定向的流程,因此用户需要访问网络浏览器。

作为基于重定向的流程,该类需要设置一个适当的回复处理程序。请参阅Qt XML OAuth2 概述QOAuthHttpServerReplyHandlerQOAuthUriSchemeReplyHandler

成员类型文档

[since 6.8] enum class QOAuth2AuthorizationCodeFlow::PkceMethod

可用的代码交换证明密钥 (PKCE) 方法列表。

PKCE 是一种安全措施,可降低授权码截获攻击的风险。因此,它适用于 OAuth2 "授权码 "流程(授予),尤其适用于本地应用程序。

PKCE 在授权和访问令牌请求中插入了附加参数。有了这些参数的帮助,授权服务器就能验证访问令牌请求是否来自发出授权请求的同一实体。

常量说明
QOAuth2AuthorizationCodeFlow::PkceMethod::None255不使用 PKCE。
QOAuth2AuthorizationCodeFlow::PkceMethod::Plain1使用普通 PKCE 方法。只有在无法使用 S256 时才使用。使用普通方法时,验证码挑战等于验证码
QOAuth2AuthorizationCodeFlow::PkceMethod::S2560使用 S256 PKCE 方法。这是默认方法,也是本地应用程序推荐使用的方法。使用 S256 方法时,代码挑战代码校验器 SHA-256 的 base64url 编码值。

该枚举在 Qt 6.8 中引入。

另请参阅 setPkceMethod() 和pkceMethod()。

属性文档

accessTokenUrl : QUrl

该属性包含用于转换授权响应中收到的临时代码的 URL。

另请参阅访问令牌请求

访问功能:

QUrl accessTokenUrl() const
void setAccessTokenUrl(const QUrl &accessTokenUrl)

Notifier 信号:

void accessTokenUrlChanged(const QUrl &accessTokenUrl)

成员函数文档

[explicit] QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(QObject *parent = nullptr)

使用父对象parent 构建 QOAuth2AuthorizationCodeFlow 对象。

[explicit] QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)

使用parent 作为父对象构建 QOAuth2AuthorizationCodeFlow 对象,并将manager 设置为网络访问管理器。

QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier, QNetworkAccessManager *manager, QObject *parent = nullptr)

使用parent 作为父对象构建 QOAuth2AuthorizationCodeFlow 对象,并将manager 设置为网络访问管理器。客户端标识符设置为clientIdentifier

QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QUrl &authenticateUrl, const QUrl &accessTokenUrl, QNetworkAccessManager *manager, QObject *parent = nullptr)

使用parent 作为父对象构建 QOAuth2AuthorizationCodeFlow 对象,并将manager 设置为网络访问管理器。验证 URL 设置为authenticateUrl ,访问令牌 URL 设置为accessTokenUrl

QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &clientIdentifier, const QUrl &authenticateUrl, const QUrl &accessTokenUrl, QNetworkAccessManager *manager, QObject *parent = nullptr)

使用parent 作为父对象构建 QOAuth2AuthorizationCodeFlow 对象,并将manager 设置为网络访问管理器。客户端标识符设置为clientIdentifier ,验证 URL 设置为authenticateUrl ,访问令牌 URL 设置为accessTokenUrl

[virtual noexcept] QOAuth2AuthorizationCodeFlow::~QOAuth2AuthorizationCodeFlow()

销毁QOAuth2AuthorizationCodeFlow 实例。

QUrl QOAuth2AuthorizationCodeFlow::accessTokenUrl() const

返回用于请求访问令牌的 URL。

注: accessTokenUrl 属性的获取函数。

另请参阅 setAccessTokenUrl()。

[protected] QUrl QOAuth2AuthorizationCodeFlow::buildAuthenticateUrl(const QMultiMap<QString, QVariant> &parameters = {})

使用parameters 生成将在授权请求中使用的身份验证 URL。

[override virtual slot] void QOAuth2AuthorizationCodeFlow::grant()

重新实现:QAbstractOAuth::grant().

启动OAuth 2.0 授权框架中所述的身份验证流程

[noexcept, since 6.8] QOAuth2AuthorizationCodeFlow::PkceMethod QOAuth2AuthorizationCodeFlow::pkceMethod() const

返回当前的 PKCE 方法。

此函数在 Qt 6.8 中引入。

另请参阅 setPkceMethod() 和QOAuth2AuthorizationCodeFlow::PkceMethod

[slot] void QOAuth2AuthorizationCodeFlow::refreshAccessToken()

调用此函数刷新令牌。访问令牌不是永久性的。在获取访问令牌时指定的时间之后,访问令牌将失效。

如果刷新令牌失败且存在访问令牌,则状态设为QAbstractOAuth::Status::Granted ,否则设为QAbstractOAuth::Status::NotAuthenticated

另请参阅 QAbstractOAuth::requestFailed() 和刷新令牌

[protected] void QOAuth2AuthorizationCodeFlow::requestAccessToken(const QString &code)

从接收到的code 中请求访问令牌。当用户在浏览器中成功完成身份验证后,code

[override virtual protected] void QOAuth2AuthorizationCodeFlow::resourceOwnerAuthorization(const QUrl &url, const QMultiMap<QString, QVariant> &parameters = {})

重实现:QAbstractOAuth::resourceOwnerAuthorization(const QUrl &url, const QMultiMap<QString, QVariant> &parameters)。

使用urlparameters 创建验证 URL。该函数发出authorizeWithBrowser() 信号,要求用户交互。

void QOAuth2AuthorizationCodeFlow::setAccessTokenUrl(const QUrl &accessTokenUrl)

将用于请求访问令牌的 URL 设置为accessTokenUrl

注: 属性accessTokenUrl 的设置函数。

另请参阅 accessTokenUrl() 。

[since 6.8] void QOAuth2AuthorizationCodeFlow::setPkceMethod(QOAuth2AuthorizationCodeFlow::PkceMethod method, qsizetype length = 43)

将当前 PKCE 方法设置为method

可选择使用length 参数设置code_verifier 的长度。该值必须在 43 到 128 字节之间。代码校验器 "本身由库随机生成。

该功能在 Qt 6.8 中引入。

另请参见 pkceMethod() 和QOAuth2AuthorizationCodeFlow::PkceMethod

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