QOAuthUriSchemeReplyHandler Class
プライベート/カスタムおよびHTTPS URIスキームのリダイレクトを処理します。詳細...
| ヘッダー: | #include <QOAuthUriSchemeReplyHandler> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth) target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake: | QT += networkauth |
| 以下のように: | Qt 6.8 |
| 継承元: | QOAuthOobReplyHandler |
プロパティ
- redirectUrl : QUrl
パブリック関数
| QOAuthUriSchemeReplyHandler() | |
| QOAuthUriSchemeReplyHandler(QObject *parent) | |
| QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr) | |
| virtual | ~QOAuthUriSchemeReplyHandler() override |
| void | close() |
(since 6.9) bool | handleAuthorizationRedirect(const QUrl &url) |
| bool | isListening() const |
| bool | listen() |
| QUrl | redirectUrl() const |
| void | setRedirectUrl(const QUrl &url) |
シグナル
| void | redirectUrlChanged() |
詳細な説明
このクラスは、リダイレクトにプライベート/カスタムまたはHTTPS URIスキームを使用するOAuth 2.0認証プロセスの応答ハンドラとして機能します。認証リダイレクト(コールバックとも呼ばれる)の受信と、それに続くアクセストークンの取得を管理します。
リダイレクト URIとは、フローの認証部分が完了した後、認証サーバーがユーザーエージェント(通常は、かつ望ましくはシステムのブラウザ)をリダイレクトする先のことです。
特定の URI スキームを使用するには、URI を正しいアプリケーションに関連付けるために、オペレーティングシステムレベルでの設定が必要です。この関連付けの設定方法は、オペレーティングシステムによって異なります。Platform Support and Dependencies を参照してください。
このクラスは、ローカルホストサーバーを設定することでhttp スキーマを処理するQOAuthHttpServerReplyHandler を補完するものです。
以下のコードは、その使用例を示しています。まず、必要な変数を定義します。
QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthUriSchemeReplyHandler m_handler;続いて、OAuthの設定を行います(簡潔にするためエラー処理は省略しています):
m_oauth.setAuthorizationUrl(QUrl(authorizationUrl));
m_oauth.setTokenUrl(QUrl(accessTokenUrl));
m_oauth.setClientIdentifier(clientIdentifier);
m_oauth.setRequestedScopeTokens({scope});
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_handler.setRedirectUrl(QUrl{"com.example.myqtapp://oauth2redirect"_L1});
m_oauth.setReplyHandler(&m_handler);
// Initiate the authorization
if (m_handler.listen()) {
m_oauth.grant();
}プライベート/カスタムURIスキーマ
カスタムURIスキーマでは、通常、リバースドメイン表記の後にパスが続く形式が使用されます。また、場合によってはホストまたはホスト+パスが指定されることもあります:
// Example with path:
com.example.myapp:/oauth2/callback
// Example with host:
com.example.myapp://oauth2.callbackHTTPS URIスキーム
HTTPS URIスキーマの場合、リダイレクトURLは通常のhttpsリンクになります:
https://myapp.example.com/oauth2/callbackこれらのリンクは、iOS では「ユニバーサルリンク」、Android では「アプリリンク」と呼ばれます。
HTTPSスキームの使用が推奨されます。これは、アプリケーション開発者に使用されるURLの所有権を証明することを義務付けることで、セキュリティを強化するためです。この証明は、関連付けファイルをホストすることで行われ、オペレーティングシステムは内部のURLディスパッチ処理の一環としてこのファイルを参照します。
このファイルの内容は、アプリケーションと使用されるURLを関連付けます。アソシエーションファイルは、HTTPリダイレクトを経由せずに一般に公開されている必要があります。さらに、ホスティングサイトには有効な証明書が必要であり、少なくともAndroidの場合、ファイルはapplication/json のコンテンツタイプとして配信されなければなりません(サーバーの設定ガイドを参照してください)。
さらに、HTTPSリンクには、ユーザビリティ上の利点もあります:
- HTTPS URLは、通常のHTTPSリンクとしても機能します。ユーザーがアプリケーションをインストールしていない場合(そのURLがどのアプリケーションによっても処理されなかった場合)、HTTPSリンクは、例えばインストール手順を表示する役割を果たすことがあります。
- URLを開くためのアプリケーション選択ダイアログが表示されず、代わりにアプリケーションが自動的に開かれる場合があります。
その代償として、このパブリックホスト上の関連付けファイルを設定する必要があるため、追加の設定作業が必要となります。
対応プラットフォームと依存関係
現在サポートされているプラットフォームは、Android、iOS、および macOS です。
URI スキームのリスニングは、QDesktopServices::setUrlHandler() およびQDesktopServices::unsetUrlHandler() に基づいています。これらは現在 Qt::Gui モジュールによって提供されているため、QtNetworkAuth モジュールは Qt::Gui に依存しています。QtNetworkAuth が Qt::Gui なしでビルドされた場合、QOAuthUriSchemeReplyHandler は含まれません。
Android
Androidでは、URI スキームの設定に以下が必要です:
- アプリケーションマニフェストでのintent-filters の設定
- オプションとして、https スキームでの自動検証を行うために、サイトアソシエーションファイルをホストするassetlinks.json
「Qt Android マニフェストファイルの設定」も参照してください。
iOS および macOS
iOSおよびmacOSでは、URIスキームに関して以下の要件があります:
- サイトアソシエーションの設定entitlement
- HTTPSスキームを使用する場合は、site association file (
apple-app-site-association) をホストする必要があります。
Windows、Linux
現在はサポートされていません。ただし、このリプライハンドラーをサポートしているプラットフォームやユースケースでは Qt WebEngine このリプライハンドラを使用できます。詳細については、「Qt OAuth2 ブラウザのサポート」を参照してください。
プロパティのドキュメント
redirectUrl : QUrl
このプロパティには、認証のリダイレクトや応答を受け取るために使用されるURLが格納されます。
このプロパティは、認証リクエストの一部として送信されるOAuth2 の `redirect_uri` パラメータとして使用されます。redirect_uri は、デフォルトのオプションで `QUrl::toString()` を呼び出すことで取得されます。
認証サーバーは、一致しない `redirect_uri` を拒否する可能性が高いので、この URL は認証サーバーに登録されているものと一致している必要があります。
同様に、このハンドラがリダイレクトを受信する際、リダイレクト URL はここで設定された URL と一致している必要があります。ハンドラは、このメソッドで設定された URL の一部であるスキーマ、ホスト、ポート、パス、およびクエリ項目を比較します。
これらすべてが一致する場合にのみ、URL は処理されます。クエリパラメータの比較では、サーバー側で設定された追加のクエリパラメータは除外されます。これらは、対象となる実際のデータを含むためです。
アクセス関数:
| QUrl | redirectUrl() const |
| void | setRedirectUrl(const QUrl &url) |
通知シグナル:
| void | redirectUrlChanged() |
メンバ関数のドキュメント
QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler()
callback()/redirectUrl() を空に設定し、親を持たない QOAuthUriSchemeReplyHandler オブジェクトを生成します。生成されたオブジェクトは、自動的にリスニングを開始しません。
[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(QObject *parent)
parent を指定し、callback()/redirectUrl() を空の値として、QOAuthUriSchemeReplyHandler オブジェクトを生成します。生成されたオブジェクトは、自動的にリスニングを開始しません。
[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr)
QOAuthUriSchemeReplyHandler オブジェクトを生成し、親オブジェクトとしてparent を、リダイレクト URL としてredirectUrl を設定します。生成されたオブジェクトは自動的にリスニングを試みます。
redirectUrl()、setRedirectUrl()、listen()、およびisListening()も参照してください 。
[override virtual noexcept] QOAuthUriSchemeReplyHandler::~QOAuthUriSchemeReplyHandler()
QOAuthUriSchemeReplyHandler オブジェクトを破棄します。このハンドラを閉じます。
close()も参照してください 。
void QOAuthUriSchemeReplyHandler::close()
このハンドラーに対し、受信URLの監視を停止するよう指示します。
listen() およびisListening()も参照してください 。
[since 6.9] bool QOAuthUriSchemeReplyHandler::handleAuthorizationRedirect(const QUrl &url)
この関数は、認証段階の終了時に認証サーバーから提供されるリダイレクトURLを指定するために使用されます。指定されたurl は、redirectUrl に記載されているのと同じURL照合処理の対象となります。
このURLを指定することは、このリダイレクトURLが他の手段(例えば Qt WebEngine やその他のカスタムな仕組みを通じて、このリダイレクトURLが取得されるシナリオにおいて、このURLを指定することは有用です。これにより、そのようなエージェントの使用をOAuth2フローの残りの部分と統合することができます。
このハンドラはリスニング状態である必要がないため、不要なリスニングを避けるために、close() を実行してハンドラを解放することを推奨します。
URLが一致して処理された場合はtrue を返し、それ以外の場合はfalse を返します。
「 Qt WebEngine を使用したリダイレクト URI スキーマ」も参照してください。
この関数は Qt 6.9 で導入されました。
[noexcept] bool QOAuthUriSchemeReplyHandler::isListening() const
このハンドラが現在リスニング中の場合は `true ` を返し、そうでない場合は `false ` を返します。
listen() およびclose()も参照してください 。
bool QOAuthUriSchemeReplyHandler::listen()
このハンドラに対し、着信するURLをリッスンするように指示します。リッスンに成功した場合はtrue を返し、失敗した場合はfalse を返します。
このハンドラは、URL をredirectUrl() と照合します。受信した URL が一致しない場合は、QDesktopServices::openURL() に転送されます。
アクティブなリスニングは、初期認証フェーズを実行する場合にのみ必要であり、通常はQOAuth2AuthorizationCodeFlow::grant() の呼び出しによって開始されます。
認証が成功した後は、リスナーを閉じることをお勧めします。acquiring access tokens に対しては、リスニングは必要ありません。
© 2026 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.