2017-03-04 6 views
2

QAのnetworkauthと新しいQOAuth2AuthorizationCodeFlowオブジェクトを使用するOAuth 2.0では、どのようにredirect_uriを設定できますか?私のコードは以下の通りです。これは、送信された後に次の認証URLになり:QOAuth2AuthorizationCodeFlowとQOAuthHttpServerReplyHandlerを使用してredirect_uriを設定する方法

QOAuth2AuthorizationCodeFlow :: buildAuthenticateUrl:REDIRECT_URIのhttps://accounts.google.com/o/oauth2/auth?client_id=123-abc.apps.googleusercontent.com&redirect_uri=http://localhost:65535/cb&response_type=code&scope=email&state=iEIYn5sN

設定を「http://localhost」に、明らかに実際のリダイレクトのホスト名を期待しているGoogleからのエラー400 redirect_uri_mismatchで結果提供されます。

GoogleGateway::GoogleGateway() { 

auto google = new QOAuth2AuthorizationCodeFlow; 
google->setScope("email"); 

this->connect(google, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, &QDesktopServices::openUrl); 

QString val; 
QFile file; 
file.setFileName("/home/me/client_secret.json"); 
file.open(QIODevice::ReadOnly | QIODevice::Text); 
val = file.readAll(); 
file.close(); 

QJsonDocument document = QJsonDocument::fromJson(val.toUtf8()); 
QJsonObject object = document.object(); 
const auto settingsObject = object["web"].toObject(); 
const QUrl authUri(settingsObject["auth_uri"].toString()); 
const auto clientId = settingsObject["client_id"].toString(); 
const QUrl tokenUri(settingsObject["token_uri"].toString()); 
const auto clientSecret(settingsObject["client_secret"].toString()); 
const auto redirectUris = settingsObject["redirect_uris"].toArray(); 
const QUrl redirectUri(redirectUris[0].toString()); 
const auto port = static_cast<quint16>(redirectUri.port()); 

google->setAuthorizationUrl(authUri); 
google->setClientIdentifier(clientId); 
google->setAccessTokenUrl(tokenUri); 
google->setClientIdentifierSharedKey(clientSecret); 

auto replyHandler = new QOAuthHttpServerReplyHandler(port, this); 
google->setReplyHandler(replyHandler); 

google->grant(); 
} 

REDIRECT_URIを設定するには、私が交換しようとしました:

auto replyHandler = new QOAuthHttpServerReplyHandler(port, this); 

QHostAddress hostaddress = QHostAddress(quint32(1233...)); 
auto replyHandler = new QOAuthHttpServerReplyHandler(hostaddress, port, this); 

で、結果に変化はないと。

replyHandler->setProperty("redirect_uri", "http://abc.xyz.com:65535/cb"); 

をも結果に変化がないと:

も挿入しようとしています。 QT/5.8/srcに/ qtnetworkauth/SRC/OAuthの/ qoauthhttpserverreplyhandler.cppで

、我々はコールバックアドレスが不審ハードコーディングされた見えることを参照してください。

QString QOAuthHttpServerReplyHandler::callback() const 
{ 
    Q_D(const QOAuthHttpServerReplyHandler); 

    Q_ASSERT(d->httpServer.isListening()); 
    const QUrl url(QString::fromLatin1("http://localhost:%1/cb").arg(d->httpServer.serverPort())); 
    return url.toString(QUrl::EncodeDelimiters); 
} 

このコールバックは、()今度はQtの中で使用されています

QUrl QOAuth2AuthorizationCodeFlow::buildAuthenticateUrl(const QVariantMap &parameters) 
{ 
    Q_D(QOAuth2AuthorizationCodeFlow); 
    using Key = QAbstractOAuth2Private::OAuth2KeyString; 

    if (d->state.isEmpty()) 
     setState(QAbstractOAuth2Private::generateRandomState()); 
    Q_ASSERT(!d->state.isEmpty()); 
    const QString state = d->state; 

    QVariantMap p(parameters); 
    QUrl url(d->authorizationUrl); 
    p.insert(Key::responseType, responseType()); 
    p.insert(Key::clientIdentifier, d->clientCredentials.first); 
    p.insert(Key::redirectUri, callback()); 
    p.insert(Key::scope, d->scope); 
    p.insert(Key::state, state); 
    if (d->modifyParametersFunction) 
     d->modifyParametersFunction(Stage::RequestingAuthorization, &p); 
    url.setQuery(d->createQuery(p)); 
    connect(d->replyHandler.data(), &QAbstractOAuthReplyHandler::callbackReceived, this, 
      &QOAuth2AuthorizationCodeFlow::authorizationCallbackReceived, Qt::UniqueConnection); 
    setStatus(QAbstractOAuth::Status::NotAuthenticated); 
    qDebug("QOAuth2AuthorizationCodeFlow::buildAuthenticateUrl: %s", qPrintable(url.toString())); 
    return url; 
} 

これはバグです:/5.8/Src/qtnetworkauth/src/oauth/qoauth2authorizationcodeflow.cppはredirectUri値を設定するには?

+0

同様に混乱している人は、https://bugreports.qt.io/browse/QTBUG-59653 – myk

答えて

0

私はちょうどMyOAuthHttpServerReplyHandlerをサブクラス化し、callback()の定義を上書きして、私が望むURIを返すことでこれを解決しました。

関連する問題