QOAuth2DeviceAuthorizationFlow Class
QOAuth2DeviceAuthorizationFlow 클래스는 장치 권한 부여 흐름의 구현을 제공합니다. 더 보기...
헤더: | #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,[](const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl) { if (completeVerificationUrl.isValid()) { // 인증 서버가 URL 파라미터의 일부로 필요한 데이터가 이미 포함된 // 완전한 URL을 제공한 경우 , // 이를 사용하도록 선택할 수 있습니다. qDebug() << "Complete verification uri:" << completeVerificationUrl; } else { // 인증 서버는 인증 URL만 제공했습니다. qDebug() << "Verification uri and usercode:" << verificationUrl << userCode; } } );
이 부분은 흐름에 매우 중요하며, 처리 방법은 특정 사용 사례에 따라 다릅니다. 어떤 식으로든 사용자는 인증을 완료해야 합니다.
디바이스 플로우에서는 이 인증 완료 방법을 정의하지 않으므로 다양한 사용 사례에 따라 다양하게 활용할 수 있습니다. 사용자에게 인증 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 |
알림 신호:
void | pollingChanged(bool polling) |
startTokenPolling() 및 stopTokenPolling()도 참조하세요 .
[read-only]
userCode : const QString
이 속성은 권한 부여 응답으로 수신된 user_code를 보유합니다. 이 코드는 사용자가 인증을 완료하는 데 사용됩니다.
액세스 함수:
QString | userCode() const |
알림 신호:
void | userCodeChanged(const QString &userCode) |
verificationUrl, completeVerificationUrl, Device 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 |
알림 신호:
void | verificationUrlChanged(const QUrl &verificationUrl) |
userCode, completeVerificationUrl, Device Flow Usage 를참조하세요 .
멤버 함수 문서
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow()
QOAuth2DeviceAuthorizationFlow 객체를 생성합니다.
[explicit]
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QObject *parent)
부모 객체 parent 를 사용하여 QOAuth2DeviceAuthorizationFlow 객체를 구성합니다.
[explicit]
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
parent 을 부모로 사용하고 manager 을 네트워크 액세스 관리자로 설정하여 QOAuth2DeviceAuthorizationFlow 개체를 구성합니다.
[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().
디바이스 권한 부여 RFC에 설명된 대로 권한 부여 플로우를 시작합니다.
흐름은 다음 단계로 구성됩니다:
- 권한 부여 서버에 권한 부여 요청
- 액세스 권한을 부여하는 사용자, authorizeWithUserCode() 참조
- 사용자가 권한 부여를 수락하거나 거부할 때까지(또는 코드가 만료될 때까지) 권한 부여 서버를 폴링합니다.
- 애플리케이션에 결과 표시( granted() 및 QAbstractOAuth::requestFailed() 참조)
이 흐름은 인증에서 토큰 폴링까지 자동으로 진행됩니다.
이 함수를 호출하면 이전 인증 데이터가 모두 초기화됩니다.
authorizeWithUserCode(), granted(), QAbstractOAuth::requestFailed(), polling, startTokenPolling(), stopTokenPolling(), Device Flow Usage도 참조 하세요.
[protected slot, since 6.9]
void QOAuth2DeviceAuthorizationFlow::refreshTokensImplementation()
이 함수는 토큰 새로 고침 요청을 보냅니다.
새로 고침 요청이 성공적으로 시작되면 상태는 QAbstractOAuth::Status::RefreshingToken 로 설정되며, 그렇지 않으면 requestFailed() 신호가 전송되고 상태는 변경되지 않습니다. isPolling 이 true
인 동안에는 토큰을 새로 고칠 수 없습니다.
토큰 새로 고침 프로세스가 이미 진행 중인 경우에는 이 함수가 적용되지 않습니다.
토큰 새로 고침에 실패하고 액세스 토큰이 존재하는 경우 상태는 QAbstractOAuth::Status::Granted 로 설정되고 액세스 토큰이 존재하지 않으면 QAbstractOAuth::Status::NotAuthenticated 으로 설정됩니다.
이 함수는 Qt 6.9에 도입되었습니다.
QAbstractOAuth::requestFailed() 및 QAbstractOAuth2::refreshTokens()도 참조하세요 .
[slot]
bool QOAuth2DeviceAuthorizationFlow::startTokenPolling()
토큰 투표를 시작합니다. 시작에 성공했거나 이미 활성화된 경우 true
, 그렇지 않은 경우 false
을 반환합니다.
일반적인 사용 사례에서는 이 함수를 호출할 필요가 없습니다. 인증 요청이 완료되면 grant() 호출의 결과로 폴링이 자동으로 시작됩니다.
이 함수는 전체 권한 부여 흐름을 다시 시작하지 않고 조금 후에 토큰 폴링을 재개(재시도)해야 하는 경우에 유용할 수 있습니다. 예를 들어 일시적인 네트워크 연결이 끊어진 경우입니다.
폴링 간격은 권한 부여 서버에서 정의하며 일반적으로 5초입니다. 첫 번째 폴링 요청은 첫 번째 간격이 경과하면 전송됩니다.
polling, stopTokenPolling() 및 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.