Я хочу использовать QtNetworkAuthorization для предоставления доступа к некоторым ресурсам через API REST. Сервер, к которому я хочу подключиться, использует Oauth1.Есть примеры Qt Network Authorization, но с использованием старых интерфейсов QOauth.Пример в официальном SDK показывает пример Twitter , но для использования QDesktopServices требуется приложение с графическим интерфейсом, а Twitter не использует verifier
.Он автоматически предоставляет доступ, когда пользователь разрешает доступ.
Для того, что я хочу сделать, требуется 3 шага.
1) Используя запрос request_token с clientID и clientSecret, получить временные учетные данные.
2) Используя clientID, clientSecret и tempToken, tempSecret просит пользователя открыть URL constentData, в котором пользователю показан код верификатора.Пользователь копирует его.
3) Используя верификатор, clientID и временные учетные данные, наше приложение запрашивает постоянные учетные данные. До сих пор используя QOAuth1, мой код:
const QString request_token_url = "https://sandboxapi.deere.com/platform/oauth/request_token";
QString request_token_query_args = "oauth_callback=oob";
QString authorize_url_base ="https://my.deere.com/consentToUseOfData";
const QString access_token_url = "https://sandboxapi.deere.com/platform/oauth/access_token";
QNetworkAccessManager * manager = new QNetworkAccessManager();
QString base_request_token_url = request_token_url + (request_token_query_args.isEmpty() ? "" : ("?"+request_token_query_args) );
QOAuth1 * oth = new QOAuth1(&a);
oth->setSignatureMethod(QOAuth1::SignatureMethod::Hmac_Sha1);
oth->setClientIdentifier(client_key);
oth->setClientSharedSecret(client_secret);
oth->setTemporaryCredentialsUrl(request_token_url);
oth->setAuthorizationUrl(authorize_url_base);
oth->setTokenCredentialsUrl(QUrl(access_token_url));
oth->setReplyHandler(new QOAuthOobReplyHandler());
oth->setContentType(QOAuth1::ContentType::Json);
oth->setNetworkAccessManager(manager);
oth->grant();
QObject::connect(oth,&QOAuth1::granted,[](){
cout<<"granted "<<endl;
});
QObject::connect(oth->replyHandler(),&QAbstractOAuthReplyHandler::tokensReceived,[](){
qDebug()<<"token received";
});
QObject::connect(manager,&QNetworkAccessManager::finished,[oth,authorize_url_base](QNetworkReply * reply){
auto result=reply->readAll();
auto tokenSecretPair=result.split('&');
auto token = tokenSecretPair[0].split('=');
auto secret = tokenSecretPair[1].split('=');
qDebug()<<token<<" "<<secret;
oth->setTokenCredentials(token[1],secret[1]);
qDebug()<<oth->tokenCredentials();
});
С этим фрагментом кодаЯ могу только получить временные полномочия.Я не могу перейти ко второму шагу, чтобы запросить верификатор пользователя.В реализации есть методы типа requestTemporaryTokens
, но они защищены.Также нет функции setVerifier в QOauth1.
Как я могу получить доступ к использованию QOAuth1, чтобы пройти все три шага аутентификации?