QOAuth2DeviceAuthorizationFlow Class

QOAuth2DeviceAuthorizationFlow クラスは、Device Authorization Grantフローの実装を提供します。詳細...

ヘッダー #include <QOAuth2DeviceAuthorizationFlow>
CMake: find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)
target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth)
qmake: QT += networkauth
以来:Qt 6.9
継承: QAbstractOAuth2

プロパティ

公共機能

QOAuth2DeviceAuthorizationFlow()
QOAuth2DeviceAuthorizationFlow(QObject *parent)
QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
virtual ~QOAuth2DeviceAuthorizationFlow() override
QUrl completeVerificationUrl() const
bool isPolling() const
QString userCode() const
QDateTime userCodeExpirationAt() const
QUrl verificationUrl() const

パブリックスロット

virtual void grant() override
bool startTokenPolling()
void stopTokenPolling()

シグナル

void authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)
void completeVerificationUrlChanged(const QUrl &completeVerificationUrl)
void pollingChanged(bool polling)
void userCodeChanged(const QString &userCode)
void userCodeExpirationAtChanged(const QDateTime &expiration)
void verificationUrlChanged(const QUrl &verificationUrl)

プロテクト・スロット

(since 6.9) void refreshTokensImplementation()

詳細説明

このクラスはデバイス認証付与フローを実装します。このフローは、特にユーザーエージェントがないデバイスや入力機能が制限されているデバイスで、アクセストークンやIDトークンを取得したり更新したりするために使用されます。このようなデバイスには、テレビ、機械の HMI、家電製品、IoT デバイスなどがあります。

デバイス・フローは、SSL/TLSリクエストが可能なあらゆるプラットフォームおよびオペレー ティング・システムで使用できる。QOAuth2AuthorizationCodeFlow と異なり、このフローはリダイレクトに基づかないため、reply handler を使用しない。

デバイスフローの使用法

以下のスニペットは、典型的な使い方を示している。まず、QOAuth2AuthorizationCodeFlow と同様にフローをセットアップする:

m_deviceFlow.setAuthorizationUrl(QUrl(authorizationUrl));
m_deviceFlow.setTokenUrl(QUrl(accessTokenUrl));
m_deviceFlow.setRequestedScopeTokens({scope});
m_deviceFlow.setClientIdentifier(clientIdentifier);
// The need for a client secret depends on the authorization server
m_deviceFlow.setClientIdentifierSharedKey(clientSecret);

次に、authorizeWithUserCode シグナルに接続し、ユーザーの認可を処理する:

connect(&m_deviceFlow, &QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode, this,[](constQUrl&verificationUrl, constQString&userCode, constQUrl&completeVerificationUrl) {if(completeVerificationUrl.isValid()) {// 認証サーバが、 URLパラメータの一部として // 必要なデータを既に含む 完全なURLを提供した場合  // そのURLを使用することを選択できる。            qDebug() << "Complete verification uri:" << completeVerificationUrl;
        }else{// 認証サーバーは検証URLのみを提供したので、それを使用する。            qDebug() << "Verification uri and usercode:" << verificationUrl << userCode;
        } } );

この部分はフローにとって重要であり、どのように処理するかは特定のユースケースに依存する。いずれにせよ、ユーザーは認証を完了する必要があります。

デバイスフローでは、この認証完了の方法を定義していないため、さまざまなユースケースに対応できます。これは、検証URIとユーザーコードをユーザーに表示し、ユーザーが別のデバイスでそのURIにナビゲートすることで実現できます。あるいは、QRコードを表示して、ユーザーがモバイルデバイスでスキャンしたり、コンパニオンアプリケーションに送信したり、ユーザーに電子メールで送信したりすることもできます。

認可が保留されている間、QOAuth2DeviceAuthorizationFlow は、ユーザーが認可を受け入れるか拒否するまで、特定の間隔(通常は5秒)でサーバーをポーリングします。

エラーは以下のように検出される:

connect(&m_deviceFlow, &QAbstractOAuth::requestFailed, this, [](QAbstractOAuth::Error error) {
    Q_UNUSED(error);
    // Handle error
});

connect(&m_deviceFlow, &QAbstractOAuth2::serverReportedErrorOccurred, this,
    [](const QString &error, const QString &errorDescription, const QUrl &uri) {
        // Check server reported error details if needed
        Q_UNUSED(error);
        Q_UNUSED(errorDescription);
        Q_UNUSED(uri);
    }
);

QAbstractOAuth2::serverReportedErrorOccurred() シグナルは、特定のRFC定義エラーに関する情報を取得するために使用できる。ただし、QAbstractOAuth::requestFailed()とは異なり、ネットワーク・エラーやクライアントの設定エラーのようなエラーは対象外である。

フローの完了は、たとえばQOAuth2AuthorizationCodeFlow と同様に検出される:

connect(&m_deviceFlow, &QAbstractOAuth::granted, this, [this](){
    // Here we use QNetworkRequestFactory to store the access token
    m_api.setBearerToken(m_deviceFlow.token().toLatin1());
});
m_deviceFlow.grant();

プロパティ・ドキュメンテーション

[read-only] completeVerificationUrl : const QUrl

このプロパティは、ユーザが認証を完了するための URL を保持する。URL 自体にuser_code が含まれているため、ユーザが手動でコードを入力する必要がない。この完全なURLのサポートは、認証サーバによって異なる。

アクセス機能

QUrl completeVerificationUrl() const

通知シグナル:

void completeVerificationUrlChanged(const QUrl &completeVerificationUrl)

verificationUrl およびDevice Flow Usageも参照のこと

[read-only] polling : const bool

このプロパティは、フローがトークンを積極的にポーリングしているかどうかを保持する。

アクセス関数:

bool isPolling() const

Notifier シグナル:

void pollingChanged(bool polling)

startTokenPolling() およびstopTokenPolling()も参照

[read-only] userCode : const QString

このプロパティは、認可応答で受け取ったuser_codeを保持する。このコードは、ユーザが認可を完了するために使用する。

アクセス関数

QString userCode() const

Notifier シグナル:

void userCodeChanged(const QString &userCode)

verificationUrlcompleteVerificationUrlDevice Flow Usageも参照のこと

[read-only] userCodeExpirationAt : const QDateTime

このプロパティは、ユーザーコードと基礎となるデバイスコードの有効期限が切れるローカル 時間を保持する。コードの有効期限は通常5~30分です。

アクセス機能

QDateTime userCodeExpirationAt() const

通知シグナル:

void userCodeExpirationAtChanged(const QDateTime &expiration)

userCodeも参照

[read-only] verificationUrl : const QUrl

このプロパティは、ユーザがユーザコードを入力して認証を完了するための URL を保持する。

アクセス関数

QUrl verificationUrl() const

Notifierシグナル:

void verificationUrlChanged(const QUrl &verificationUrl)

userCodecompleteVerificationUrlDevice Flow Usageも参照のこと

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

QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow()

QOAuth2DeviceAuthorizationFlow オブジェクトを構築する。

[explicit] QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QObject *parent)

親オブジェクトparent を持つ QOAuth2DeviceAuthorizationFlow オブジェクトを構築する。

[explicit] QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)

parent を親として QOAuth2DeviceAuthorizationFlow オブジェクトを構築し、manager をネットワークアクセスマネージャとして設定する。

[override virtual noexcept] QOAuth2DeviceAuthorizationFlow::~QOAuth2DeviceAuthorizationFlow()

QOAuth2DeviceAuthorizationFlow インスタンスを破棄します。

[signal] void QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)

このシグナルは、ユーザが認可を完了すべきときに発行される。

認可サーバーがcompleteVerificationUrl を提供している場合、ユーザーはそのURLにナビゲートできる。このURLには、必要なuserCode 、その他必要なパラメータが含まれている。

あるいは、ユーザはverificationUrl に移動し、userCode を手動で入力する必要がある。

Device Flow Usageも参照のこと

[override virtual slot] void QOAuth2DeviceAuthorizationFlow::grant()

再インプリメント:QAbstractOAuth::grant().

Device Grant RFC に記述されている認可フローを開始する。

フローは以下のステップで構成される:

  • 認可サーバーへの認可リクエスト
  • ユーザがアクセスを認可する。authorizeWithUserCode() を参照。
  • ユーザが認可を受諾または拒否するまで(またはコードが期限切れになるまで)、認可サーバをポーリングする。
  • アプリケーションへの結果通知(granted()とQAbstractOAuth::requestFailed()を参照)

フローは、認証からトークンのポーリングまで自動的に進行します。

この関数を呼び出すと、以前の認証データはリセットされます。

authorizeWithUserCode()、granted()、QAbstractOAuth::requestFailed()、pollingstartTokenPolling()、stopTokenPolling()、Device Flow Usageも参照

[protected slot, since 6.9] void QOAuth2DeviceAuthorizationFlow::refreshTokensImplementation()

この関数はトークンのリフレッシュ要求を送信する。

リフレッシュ要求が正常に開始された場合、ステータスはQAbstractOAuth::Status::RefreshingToken に設定される。そうでない場合、requestFailed() シグナルが発行され、ステータスは変更されない。isPollingtrue の間はトークンをリフレッシュできません。

トークンのリフレッシュ処理が既に進行中の場合、この関数は何の効果も持たない。

トークンのリフレッシュに失敗し、アクセストークンが存在する場合、ステータスはQAbstractOAuth::Status::Granted に設定され、アクセストークンが存在しない場合はQAbstractOAuth::Status::NotAuthenticated に設定されます。

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

QAbstractOAuth::requestFailed() およびQAbstractOAuth2::refreshTokens()も参照してください

[slot] bool QOAuth2DeviceAuthorizationFlow::startTokenPolling()

トークンのポーリングを開始する。開始が成功した(またはすでにアクティブだった)場合はtrue を返し、そうでない場合はfalse を返す。

一般的な使用例では、この関数を呼び出す必要はない。grant ()呼び出しの結果、認証要求が完了すると、ポーリングが自動的に開始される。

この関数は、認可フロー全体を再開することなく、トークンのポー リングを少し後で再開する(再試行する)必要がある場合に有用である。例えば、ネットワーク接続が一時的に切断された場合などである。

ポーリング間隔は認可サーバによって定義され、通常5秒である。最初のポーリング要求は、最初の間隔が経過した時点で送信される。

pollingstopTokenPolling()、Device Flow Usageも参照のこと

[slot] void QOAuth2DeviceAuthorizationFlow::stopTokenPolling()

トークンのポーリングを停止します。未処理の可能性のあるポーリング要求はすべて静かに破棄される。

polling およびstartTokenPolling()も参照のこと

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