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

속성

공공 기능

QOAuthUriSchemeReplyHandler()
QOAuthUriSchemeReplyHandler(QObject *parent)
QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr)
virtual ~QOAuthUriSchemeReplyHandler() override
void close()
bool isListening() const
bool listen()
QUrl redirectUrl() const
void setRedirectUrl(const QUrl &url)

신호

상세 설명

이 클래스는 리디렉션을 위해 비공개/사용자 지정 또는 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("https://some.authorization.service/v3/authorize"_L1));
m_oauth.setAccessTokenUrl(QUrl("https://some.authorization.service/v3/access_token"_L1));
m_oauth.setClientIdentifier("a_client_id"_L1);
m_oauth.setScope("read"_L1);

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 스키마 응답 핸들러를 설정합니다:

m_handler.setRedirectUrl(QUrl{"com.my.app:/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.callback

HTTPS URI 스키마

HTTPS URI 스키마를 사용하면 리디렉션 URL은 일반 https 링크입니다:

https://myapp.example.com/oauth2/callback

이러한 링크를 iOS에서는 유니버설 링크, Android에서는 앱 링크라고 합니다.

애플리케이션 개발자가 사용된 URL의 소유권을 증명하도록 함으로써 추가적인 보안을 제공하므로 https 스키마를 사용하는 것이 좋습니다. 이 증명은 운영 체제가 내부 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는 포함되지 않습니다.

안드로이드

안드로이드에서는 URI 스키마가 필요합니다:

  • 애플리케이션 매니페스트에서 intent-filters 설정
  • 선택적으로, https 스키마를 사용한 자동 확인을 위해 사이트 연결 파일을 호스팅합니다. assetlinks.json

Qt 안드로이드 매니페스트 파일 구성을 참조하세요.

iOS 및 macOS

iOSmacOS에서는 URI 스키마가 필요합니다:

Windows, Linux

현재 지원되지 않습니다.

속성 문서

redirectUrl : QUrl

이 속성은 권한 리디렉션/응답을 받는 데 사용되는 URL을 보유합니다.

이 속성은 인증 요청의 일부로 전송되는 OAuth2 redirect_uri 매개 변수로 사용됩니다. QUrl::toString ()을 호출하여 기본 옵션으로 redirect_uri 를 가져옵니다.

인증 서버는 일치하지 않는 redirect_uris를 거부할 가능성이 높으므로 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 을 부모 객체로, redirectUrl 을 리디렉션 URL로 설정합니다. 구성된 객체는 자동으로 수신을 시도합니다.

redirectUrl(), setRedirectUrl(), listen() 및 isListening()도 참조하세요 .

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

QOAuthUriSchemeReplyHandler 객체를 삭제합니다. 이 핸들러를 닫습니다.

close()도 참조하십시오 .

void QOAuthUriSchemeReplyHandler::close()

이 핸들러에 들어오는 URL 수신을 중지하도록 지시합니다.

listen() 및 isListening()도 참조하세요 .

[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 에는 수신이 필요하지 않습니다.

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