QOAuthHttpServerReplyHandler Class

ローカル HTTP サーバを設定することで、ループバック・リダイレクトを処理します。詳細...

ヘッダ #include <QOAuthHttpServerReplyHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)
target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth)
qmake: QT += networkauth
を継承する:QOAuthOobReplyHandler

パブリック関数

QOAuthHttpServerReplyHandler(QObject *parent = nullptr)
QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)
QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)
virtual ~QOAuthHttpServerReplyHandler()
(since 6.9) QString callbackHost() const
QString callbackPath() const
QString callbackText() const
void close()
bool isListening() const
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
bool listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
quint16 port() const
(since 6.9) void setCallbackHost(const QString &host)
void setCallbackPath(const QString &path)
void setCallbackText(const QString &text)

詳細説明

このクラスは、ループバックリダイレクトを使用するOAuth 2.0認証プロセス用のリプライハンドラです。

リダイレクト URIは、認可サーバーがユーザーエージェント (通常はシステムブラウザ) をリダイレクトする場所です。ループバックリダイレクトURIは、スキームとしてhttp 、 ホストとしてlocalhostまたはIPアドレスリテラル(IPv4 and IPv6 参照)を使用する。

QOAuthHttpServerReplyHandlerはlocalhostサーバーを設定する。認可サーバーがブラウザをこのlocalhostアドレスにリダイレクトすると、リプライハンドラはリダイレクトURIのクエリーパラメータを解析し、a signal で認可完了のシグナルを送る。

他のリダイレクトURIスキームを扱うには、QOAuthUriSchemeReplyHandler を参照のこと。

次のコードは使い方を示している。まず、必要な変数です:

QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthHttpServerReplyHandler *m_handler = nullptr;

続いてOAuthのセットアップ(簡潔のためエラー処理は省略):

m_oauth.setAuthorizationUrl(QUrl(authorizationUrl));
m_oauth.setTokenUrl(QUrl(accessTokenUrl));
m_oauth.setClientIdentifier(clientIdentifier);
m_oauth.setRequestedScopeTokens({scope});

m_handler = new QOAuthHttpServerReplyHandler(1234, this);

connect(&m_oauth, &QAbstractOAuth::authorizeWithBrowser, this, &QDesktopServices::openUrl);
connect(&m_oauth, &QAbstractOAuth::granted, this, [this]() {
    // Here we use QNetworkRequestFactory to store the access token
    m_api.setBearerToken(m_oauth.token().toLatin1());
    m_handler->close();
});

最後に、URIスキームのreply-handlerをセットアップします:

m_oauth.setReplyHandler(m_handler);

// Initiate the authorization
if (m_handler->isListening()) {
    m_oauth.grant();
}

IPv4とIPv6

ハンドラーがエニーアドレスハンドラー(AnyIPv4, AnyIPv6, or Any)の場合、使用されるコールバックはhttp://localhost:{port}/{path} の形式である。ハンドラーは最初にIPv4のループバックアドレスをリッスンし、次にIPv6をリッスンしようとする。localhost が使用されるのは、IPv4とIPv6の両方のインターフェイスで正しく解決されるからである。

ループバックアドレス(LocalHost or LocalHostIPv6)にはIPリテラル(127.0.0.1::1)が使用される。

例えば、IPv4アドレスの場合、http://192.168.0.123:{port}/{path}のように、特定のIPアドレスに対しては、指定されたIPリテラルを直接使用する。

また、setCallbackHost()を使用して、コールバックURLのホスト部分を手動で指定することも可能です。例えば、コールバックをlocalhost.localnet 。当然ながら、このようなアドレスがリダイレクト時に到達可能であることを確認する必要があります。

auto replyHandler = new QOAuthHttpServerReplyHandler(QHostAddress::LocalHost, 1337, this);
replyHandler->setCallbackHost("localhost.localnet"_L1);

HTTPおよびHTTPSコールバック

Qt 6.9 以降では、ハンドラがhttp の代わりにhttps URI スキームを使用するように設定することができます。これは、listen() を呼び出す際に適切なQSslConfiguration を指定することで行います。内部的にはハンドラはQSslServer を使用し、コールバック(リダイレクトURL)はhttps://{host}:{port}/{path} の形式になります。

次の例はこれを示している:

// 証明書と秘密鍵を読み込むautocertificates=QSslCertificate::fromPath(sslCertificateFile);QFilekeyFile(sslPrivateKeyFile);if(!keyFile.open(QFile::ReadOnly)){の場合    qWarning("Cannot open key file");
   return;}を返すQSslKeyprivateKey(&keyFile, QSsl::Rsa, QSsl::Pem);if(certificates.size()== 0 ||privateKey.isNull()) {.    qWarning("SSL certificate data invalid");
   return; }// SSL設定を作成するQSslConfigurationconfiguration=QSslConfiguration::defaultConfiguration(); configuration.setLocalCertificate(certificates.at(0)); configuration.setPrivateKey(privateKey);// SSLコンフィギュレーションでハンドラをインスタンス化m_handler= newQOAuthHttpServerReplyHandler(1234, this); m_handler->listen(configuration);

可能であれば、他のリダイレクト URI オプションを使用することを推奨します。

localhosthttps ハンドラの主な使用例は、開発時や厳密に管理されたプロビジョニング環境に限定すべきです。たとえば、認証サーバによってはプレーンなhttp リダイレクト URI を許可しないものもあります。

セキュリティの観点からは、SSL/TLS を使うことでローカルホストのトラフィックは暗号化されますが、OAuth2 にはPKCE のような他のセキュリティメカニズムもあります。どのような状況であっても、アプリケーションと一緒にプライベートな証明書キーを配布すべきではありません。

注意: 証明書が信頼できない場合、ブラウザは厳しい警告を出します。これは自己署名証明書の典型的な例で、その使用は開発時に限定されるべきです。

メンバー関数のドキュメント

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

parent を親オブジェクトとして QOAuthHttpServerReplyHandler オブジェクトを構築する。ポート0 およびアドレスLocalHost を指定してlisten() をコールします。

listen()も参照

[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)

parent を親オブジェクトとして QOAuthHttpServerReplyHandler オブジェクトを構築する。port とアドレスLocalHost を使用してlisten() を呼び出します。

listen()も参照してください

[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)

parent を親オブジェクトとして QOAuthHttpServerReplyHandler オブジェクトを構築する。address およびport を使用してlisten() をコールします。

listen()も参照

[virtual noexcept] QOAuthHttpServerReplyHandler::~QOAuthHttpServerReplyHandler()

QOAuthHttpServerReplyHandler オブジェクトを破棄する。接続/リダイレクションのリッスンを停止します。

close()も参照

[since 6.9] QString QOAuthHttpServerReplyHandler::callbackHost() const

callback() /OAuth2 redirect_uri パラメータのホストコンポーネントとして使用される名前を返します。

この関数は Qt 6.9 で導入されました。

setCallbackHost()も参照してください

QString QOAuthHttpServerReplyHandler::callbackPath() const

callback() /OAuth2 redirect_uri パラメータの path コンポーネントとして使用するパスを返します。

setCallbackPath()も参照ください

QString QOAuthHttpServerReplyHandler::callbackText() const

認証ステージの最後に、リダイレクトに応答するテキストを返します。

このテキストはシンプルな HTML ページでラップされ、 リダイレクトを行ったブラウザ/ユーザーエージェントによってユーザーに表示されます。

デフォルトのテキストは

Callback received. Feel free to close this page.

setCallbackText()も参照

void QOAuthHttpServerReplyHandler::close()

このハンドラに、接続やリダイレクションのリッスンを停止するように指示する。

listen()も参照ください

bool QOAuthHttpServerReplyHandler::isListening() const

このハンドラが現在リッスン中であればtrue を返し、そうでなければfalse を返す。

listen() およびclose()も参照

bool QOAuthHttpServerReplyHandler::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

このハンドラに、addressport の着信コネクション/リダイレクションをリッスンするよう指示する。リスニングに成功した場合はtrue を返し、失敗した場合はfalse を返す。

アクティブリスニングが必要なのは、最初の認可フェーズを実行するときだけである。通常はQOAuth2AuthorizationCodeFlow::grant() のコールによって開始される。

認証に成功したら、リスナーをクローズすることを推奨する。リスニングは、requesting access tokens やリフレッシュには必要ない。

この関数がNulladdress として呼び出された場合、ハンドラはLocalHost のリスニングを試み、失敗した場合はLocalHostIPv6 のリスニングを試みる。

IPv4 and IPv6 も参照のこと。

close()、isListening()、QTcpServer::listen()参照のこと。

bool QOAuthHttpServerReplyHandler::listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

address およびport で、https の着信コネクション/リダイレクトをリッスンするよう、このハンドラに指示する。リッスンに成功した場合はtrue を返し、失敗した場合はfalse を返します。

詳細はHTTP and HTTPS Callbacks を参照。

listen(const QHostAddress &, quint16),close(),isListening(),QSslServer, およびQTcpServer::listen()も参照してください

quint16 QOAuthHttpServerReplyHandler::port() const

このハンドラがリッスンしているポートを返す。

listen() およびisListening()も参照

[since 6.9] void QOAuthHttpServerReplyHandler::setCallbackHost(const QString &host)

callback()のホスト名コンポーネントとして使用するhost を設定する。空でないhost を指定すると、デフォルトの動作を上書きします。IPv4 and IPv6 を参照してください。

この関数は Qt 6.9 で導入されました。

callbackHost()も参照してください

void QOAuthHttpServerReplyHandler::setCallbackPath(const QString &path)

callback() のパス・コンポーネントとして使用するpath を設定する。

callbackPath()も参照

void QOAuthHttpServerReplyHandler::setCallbackText(const QString &text)

認証ステージの最後にリダイレクトに応答する際に使用するtext を設定する。

callbackText()も参照のこと

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