Google OAuth 2.0 刷新令牌持久性 Qt

问题描述 投票:0回答:2

我想通过 Google-API 从 Qt 5.9 C++ 桌面应用程序获取数据。

使用

QOAuth2AuthorizationCodeFlow
我可以登录并访问我需要的任何数据。

现在的问题是我不知道如何存储刷新令牌,这样我就不必在每次启动应用程序时都经历整个身份验证过程。

QOAuth2AuthorizationCodeFlow
似乎没有访问刷新令牌的接口。

我尝试手动请求刷新令牌,但只能收到一条错误消息,表明该请求没有足够的身份验证范围。令牌服务 API 的文档没有提及要添加哪个范围来解决此问题。

如何避免每次启动应用程序时重新进行身份验证(即使仅相隔几秒钟)?

qt google-api
2个回答
1
投票

我最终使用一个小型库解决了这个问题。

链接到 github 上的 o2 库。

这个库是开源的,具有非常开放的许可证,易于使用,并且易于添加到 CMake 构建中。

下载源代码,并使用 CMake 构建、编译和安装它们。默认构建选项需要外部库“QKeychain”,但在禁用 CMake 选项中的依赖项时它对我来说效果很好。 然后将 .lib 文件和 include 文件夹添加到项目的 CMakeLists.txt 中。

使用该库只是创建一个特殊的 O2Google 对象用于身份验证和一个 O2Requestor 来向 API 发出经过身份验证的请求。该refresh_token将被自动持久存储,这样每次启动应用程序时都不需要重新验证。


0
投票

Qt 确实提供了检索刷新令牌的方法:

QAbstractOAuth2::refreshToken() // read refresh token and store somewhere safe

您可以在稍后的会话中使用它

QAbstractOAuth2::setRefreshToken(const QString &refreshToken)
QOAuth2AuthorizationCodeFlow::refreshAccessToken()

成功时将触发授予信号。

© www.soinside.com 2019 - 2024. All rights reserved.